Sparse profile augmentation using a mobile aggregate profiling system

ABSTRACT

Systems and methods are provided for augmenting a user profile of a subject user. In general, the user profile of the subject user is augmented based on aggregate profile data for a group of users relevant to a current location of the subject user. In one embodiment, the group of users is a crowd of users currently located at a location that is relevant to the current location of the subject user. In another embodiment, the group of users is a number of users historically, or previously, located at locations relevant to the current location of the subject user.

RELATED APPLICATIONS

This application claims the benefit of provisional patent applicationSer. No. 61/163,091, filed Mar. 25, 2009, the disclosure of which ishereby incorporated by reference in its entirety.

FIELD OF THE DISCLOSURE

The present disclosure relates to augmenting a sparse user profile.

BACKGROUND

Many systems and services rely on user profiles of their users. However,oftentimes, users fail to adequately complete their user profiles,thereby resulting in incomplete or sparse user profiles. In order toincrease the effectiveness of systems and services that rely on userprofiles, there is a need for a system and method for augmenting sparseuser profiles.

SUMMARY

Systems and methods are provided for augmenting a user profile of asubject user. In general, the user profile of the subject user isaugmented based on aggregate profile data for a group of users relevantto a current location of the subject user. In one embodiment, the groupof users is a crowd of users currently located at a location that isrelevant to the current location of the subject user. In anotherembodiment, the group of users is a number of users historically, orpreviously, located at locations relevant to the current location of thesubject user.

In one embodiment, a profile augmentation function obtains an aggregateprofile of a crowd of users currently located at or near the currentlocation of the subject user. The aggregate profile of the crowdincludes a number of keywords and a number of user matches, oroccurrences, of each of the keywords in user profiles of the users inthe crowd. The profile augmentation function then augments the userprofile of the subject user based on the keywords and the number of usermatches for the keywords in the aggregate profile of the crowd.

In another embodiment, the profile augmentation function obtains ahistorical aggregate profile for users previously, or historically,located at or near the current location of the subject user. In oneembodiment, the historical aggregate profile includes a number ofkeywords and a number of user matches, or occurrences, of each of thekeywords in user profiles of the users historically located at or nearthe current location of the subject user. The profile augmentationfunction then augments the user profile of the subject user based on thekeywords and the number of user matches for the keywords in thehistorical aggregate profile.

Those skilled in the art will appreciate the scope of the presentinvention and realize additional aspects thereof after reading thefollowing detailed description in association with the accompanyingdrawings.

BRIEF DESCRIPTION OF THE DRAWINGS

The accompanying drawings incorporated in and forming a part of thisspecification illustrate several aspects of the invention, and togetherwith the description serve to explain the principles of the invention.

FIG. 1A illustrates a system providing sparse profile augmentationaccording to a first embodiment of the present disclosure;

FIG. 1B illustrates a system providing sparse profile augmentationaccording to a second exemplary embodiment of the present disclosure;

FIG. 2 is a block diagram of the MAP server of FIGS. 1A and 1B accordingto one embodiment of the present disclosure;

FIG. 3 is a block diagram of the MAP client of one of the mobile devicesof FIGS. 1A and 1B according to one embodiment of the presentdisclosure;

FIG. 4 illustrates the operation of the system of FIGS. 1A and 1B toprovide user profiles and current locations of the users of the mobiledevices to the MAP server according to one embodiment of the presentdisclosure;

FIG. 5 illustrates the operation of the system of FIGS. 1A and 1B toprovide user profiles and current locations of the users of the mobiledevices to the MAP server according to another embodiment of the presentdisclosure;

FIGS. 6 and 7 graphically illustrate bucketization of users according tolocation for purposes of maintaining a historical record of anonymizeduser profile data by location according to one embodiment of the presentdisclosure;

FIG. 8 is a flow chart illustrating the operation of a foregroundbucketization process performed by the MAP server to maintain the listsof users for location buckets for purposes of maintaining a historicalrecord of anonymized user profile data by location according to oneembodiment of the present disclosure;

FIG. 9 is a flow chart illustrating the anonymization and storageprocess performed by the MAP server for the location buckets in order tomaintain a historical record of anonymized user profile data by locationaccording to one embodiment of the present disclosure;

FIG. 10 graphically illustrates anonymization of a user record accordingto one embodiment of the present disclosure;

FIG. 11 is a flow chart for a quadtree based storage process that may beused to store anonymized user profile data for location bucketsaccording to one embodiment of the present disclosure;

FIG. 12 is a flow chart illustrating a quadtree algorithm that may beused to process the location buckets for storage of the anonymized userprofile data according to one embodiment of the present disclosure;

FIGS. 13A through 13E graphically illustrate the process of FIG. 12 forthe generation of a quadtree data structure for one exemplary basequadtree region;

FIG. 14 illustrates the operation of the system of FIGS. 1A and 1Bwherein a mobile device is enabled to request and receive historicaldata from the MAP server according to one embodiment of the presentdisclosure;

FIG. 15 is a flow chart for a spatial crowd formation process accordingto one embodiment of the present disclosure;

FIGS. 16A through 16D graphically illustrate the crowd formation processof FIG. 15 for an exemplary bounding box;

FIGS. 17A through 17D illustrate a flow chart for a spatial crowdformation process according to another embodiment of the presentdisclosure;

FIGS. 18A through 18D graphically illustrate the crowd formation processof FIGS. 17A through 17D for a scenario where the crowd formationprocess is triggered by a location update for a user having no oldlocation;

FIGS. 19A through 19F graphically illustrate the crowd formation processof FIGS. 17A through 17D for a scenario where the new and old boundingboxes overlap;

FIGS. 20A through 20E graphically illustrate the crowd formation processof FIGS. 17A through 17D in a scenario where the new and old boundingboxes do not overlap;

FIG. 21 illustrates the operation of the MAP server to process a crowdrequest according to one embodiment of the present disclosure;

FIG. 22 is a flow chart illustrating the operation of the profileaugmentation function of FIGS. 1A and 1B to augment a user profile of asubject user based on an aggregate profile of a crowd at or near acurrent location of the subject user according to one embodiment of thepresent disclosure;

FIG. 23 is a more detailed illustration of the augmenting step of FIG.22 according to one embodiment of the present disclosure;

FIG. 24 is a flow chart illustrating the operation of the profileaugmentation to update a user profile of a subject user according to oneembodiment of the present disclosure;

FIG. 25 is a more detailed illustration of the augmenting step of FIG.22 according to another embodiment of the present disclosure;

FIG. 26 is a flow chart illustrating the operation of the profileaugmentation function of FIG. 1A to augment a user profile of a subjectuser based on an aggregate profile of a crowd at or near a currentlocation of the subject user according to one embodiment of the presentdisclosure;

FIG. 27 is a flow chart illustrating the operation of the profileaugmentation function of FIG. 1B to augment a user profile of a subjectuser based on an aggregate profile of a crowd at or near a currentlocation of the subject user according to one embodiment of the presentdisclosure;

FIG. 28 is a flow chart illustrating the operation of the profileaugmentation function of FIGS. 1A and 1B to augment a user profile of asubject user based on a historical aggregate profile for a currentlocation of the subject user according to another embodiment of thepresent disclosure;

FIG. 29 is more detailed illustration of the augmenting step of FIG. 28according to one embodiment of the present disclosure;

FIG. 30 is more detailed illustration of the augmenting step of FIG. 28according to another embodiment of the present disclosure;

FIG. 31 is a flow chart illustrating the operation of the profileaugmentation function of FIG. 1A to augment a user profile of a subjectuser based on a historical aggregate profile for a current location ofthe subject user according to one embodiment of the present disclosure;

FIG. 32 is a flow chart illustrating the operation of the profileaugmentation function of FIG. 1B to augment a user profile of a subjectuser based on a historical aggregate profile for a current location ofthe subject user according to another embodiment of the presentdisclosure;

FIG. 33 is a flow chart illustrating the operation of the MAP server togenerate a historical aggregate profile for a current location of asubject user in response to a request from the profile augmentationfunction according to one embodiment of the present disclosure;

FIG. 34 is a block diagram of the MAP server of FIG. 1 according to oneembodiment of the present disclosure;

FIG. 35 is a block diagram of one of the mobile devices of FIG. 1according to one embodiment of the present disclosure;

FIG. 36 is a block diagram of the subscriber device of FIG. 1 accordingto one embodiment of the present disclosure;

FIG. 37 is a block diagram of the third-party server of FIG. 1 accordingto one embodiment of the present disclosure; and

FIG. 38 is a block diagram of the profile server of FIG. 1 according toone embodiment of the present disclosure.

DETAILED DESCRIPTION

The embodiments set forth below represent the necessary information toenable those skilled in the art to practice the invention and illustratethe best mode of practicing the invention. Upon reading the followingdescription in light of the accompanying drawings, those skilled in theart will understand the concepts of the invention and will recognizeapplications of these concepts not particularly addressed herein. Itshould be understood that these concepts and applications fall withinthe scope of the disclosure and the accompanying claims.

FIG. 1A illustrates a system 10 providing sparse profile augmentationaccording to a first exemplary embodiment of the present disclosure. Inthis embodiment, the system 10 includes a MAP server 12, one or moreprofile servers 14, a location server 16, a number of mobile devices18-1 through 18-N having associated users 20-1 through 20-N, asubscriber device 22 having an associated subscriber 24, and athird-party server 26 communicatively coupled via a network 28. Thenetwork 28 may be any type of network or any combination of networks.Specifically, the network 28 may include wired components, wirelesscomponents, or both wired and wireless components. In one exemplaryembodiment, the network 28 is a distributed public network such as theInternet, where the mobile devices 18-1 through 18-N are enabled toconnect to the network 28 via local wireless connections (e.g., WiFi orIEEE 802.11 connections) or wireless telecommunications connections(e.g., 3G or 4G telecommunications connections such as GSM, LTE, W-CDMA,or WiMAX connections).

As discussed below in detail, the MAP server 12 operates to obtaincurrent locations, including location updates, and user profiles of theusers 20-1 through 20-N of the mobile devices 18-1 through 18-N. Thecurrent locations of the users 20-1 through 20-N can be expressed aspositional geographic coordinates such as latitude-longitude pairs, anda height vector (if applicable), or any other similar informationcapable of identifying a given physical point in space in atwo-dimensional or three-dimensional coordinate system. Using thecurrent locations and user profiles of the users 20-1 through 20-N, theMAP server 12 is enabled to provide a number of features such as, butnot limited to, maintaining a historical record of anonymized userprofile data by location, generating aggregate profile data over timefor a Point of Interest (POI) or Area of Interest (AOI) using thehistorical record of anonymized user profile data, identifying crowds ofusers using current locations and/or user profiles of the users 20-1through 20-N, and generating aggregate profiles for crowds of users at aPOI or in an AOI using the current user profiles of users in the crowds.While not essential, for additional information regarding the MAP server12, the interested reader is directed to U.S. patent application Ser.No. 12/645,535 entitled MAINTAINING A HISTORICAL RECORD OF ANONYMIZEDUSER PROFILE DATA BY LOCATION FOR USERS IN A MOBILE ENVIRONMENT, U.S.patent application Ser. No. 12/645,532 entitled FORMING CROWDS ANDPROVIDING ACCESS TO CROWD DATA IN A MOBILE ENVIRONMENT, U.S. patentapplication Ser. No. 12/645,539 entitled ANONYMOUS CROWD TRACKING, U.S.patent application Ser. No. 12/645,544 entitled MODIFYING A USER'SCONTRIBUTION TO AN AGGREGATE PROFILE BASED ON TIME BETWEEN LOCATIONUPDATES AND EXTERNAL EVENTS, U.S. patent application Ser. No. 12/645,546entitled CROWD FORMATION FOR MOBILE DEVICE USERS, U.S. patentapplication Ser. No. 12/645,556 entitled SERVING A REQUEST FOR DATA FROMA HISTORICAL RECORD OF ANONYMIZED USER PROFILE DATA IN A MOBILEENVIRONMENT, and U.S. patent application Ser. No. 12/645,560 entitledHANDLING CROWD REQUESTS FOR LARGE GEOGRAPHIC AREAS, all of which werefiled on Dec. 23, 2009 and are hereby incorporated herein by referencein their entireties. Note that while the MAP server 12 is illustrated asa single server for simplicity and ease of discussion, it should beappreciated that the MAP server 12 may be implemented as a singlephysical server or multiple physical servers operating in acollaborative manner for purposes of redundancy and/or load sharing.

In general, the one or more profile servers 14 operate to store userprofiles for a number of persons including the users 20-1 through 20-Nof the mobile devices 18-1 through 18-N. For example, the one or moreprofile servers 14 may be servers providing social network services suchas the Facebook® social networking service, the MySpace® socialnetworking service, the LinkedIN® social networking service, and/or thelike. As discussed below, using the one or more profile servers 14, theMAP server 12 is enabled to directly or indirectly obtain the userprofiles of the users 20-1 through 20-N of the mobile devices 18-1through 18-N. The location server 16 generally operates to receivelocation updates from the mobile devices 18-1 through 18-N and make thelocation updates available to entities such as, for instance, the MAPserver 12. In one exemplary embodiment, the location server 16 is aserver operating to provide Yahoo!'s FireEagle service. Beforeproceeding, it should be noted that while the system 10 of FIG. 1Aillustrates an embodiment where the one or more profile servers 14 andthe location server 16 are separate from the MAP server 12, the presentdisclosure is not limited thereto. In an alternative embodiment, thefunctionality of the one or more profile servers 14 and/or the locationserver 16 may be implemented within the MAP server 12.

The mobile devices 18-1 through 18-N may be mobile smart phones,portable media player devices, mobile gaming devices, or the like. Someexemplary mobile devices that may be programmed or otherwise configuredto operate as the mobile devices 18-1 through 18-N are the Apple®iPhone, the Palm Pre, the Samsung Rogue, the Blackberry Storm, and theApple® iPod Touch® device. However, this list of exemplary mobiledevices is not exhaustive and is not intended to limit the scope of thepresent disclosure.

The mobile devices 18-1 through 18-N include MAP clients 30-1 through30-N, MAP applications 32-1 through 32-N, third-party applications 34-1through 34-N, and location functions 36-1 through 36-N, respectively.Using the mobile device 18-1 as an example, the MAP client 30-1 ispreferably implemented in software. In general, in the preferredembodiment, the MAP client 30-1 is a middleware layer operating tointerface an application layer (i.e., the MAP application 32-1 and thethird-party applications 34-1) to the MAP server 12. More specifically,the MAP client 30-1 enables the MAP application 32-1 and the third-partyapplications 34-1 to request and receive data from the MAP server 12. Inaddition, the MAP client 30-1 enables applications, such as the MAPapplication 32-1 and the third-party applications 34-1, to access datafrom the MAP server 12.

The MAP application 32-1 is also preferably implemented in software. TheMAP application 32-1 generally provides a user interface componentbetween the user 20-1 and the MAP server 12. More specifically, amongother things, the MAP application 32-1 enables the user 20-1 to initiatehistorical requests for historical data (e.g., historical aggregateprofile data) or crowd requests for crowd data (e.g., aggregate profiledata and/or crowd characteristics data) from the MAP server 12 for a POIor AOI. The MAP application 32-1 also enables the user 20-1 to configurevarious settings. For example, the MAP application 32-1 may enable theuser 20-1 to select a desired social networking service (e.g., Facebook,MySpace, LinkedIN, etc.) from which to obtain the user profile of theuser 20-1 and provide any necessary credentials (e.g., username andpassword) needed to access the user profile from the social networkingservice.

The third-party applications 34-1 are preferably implemented insoftware. The third-party applications 34-1 operate to access the MAPserver 12 via the MAP client 30-1. The third-party applications 34-1 mayutilize data obtained from the MAP server 12 in any desired manner. Asan example, one of the third party applications 34-1 may be a gamingapplication that utilizes historical aggregate profile data to notifythe user 20-1 of POIs or AOIs where persons having an interest in thegame have historically congregated.

The location function 36-1 may be implemented in hardware, software, ora combination thereof. In general, the location function 36-1 operatesto determine or otherwise obtain the location of the mobile device 18-1.For example, the location function 36-1 may be or include a GlobalPositioning System (GPS) receiver.

The subscriber device 22 is a physical device such as a personalcomputer, a mobile computer (e.g., a notebook computer, a netbookcomputer, a tablet computer, etc.), a mobile smart phone, or the like.The subscriber 24 associated with the subscriber device 22 is a personor entity. In general, the subscriber device 22 enables the subscriber24 to access the MAP server 12 via a web browser 38 to obtain varioustypes of data, preferably for a fee. For example, the subscriber 24 maypay a fee to have access to historical aggregate profile data for one ormore POIs and/or one or more AOIs, pay a fee to have access to crowddata such as aggregate profiles for crowds located at one or more POIsand/or located in one or more AOIs, pay a fee to track crowds, or thelike. Note that the web browser 38 is exemplary. In another embodiment,the subscriber device 22 is enabled to access the MAP server 12 via acustom application.

The third-party server 26 is a physical server that has access to datafrom the MAP server 12 such as historical aggregate profile data for oneor more POIs or one or more AOIs or crowd data such as aggregateprofiles for one or more crowds at one or more POIs or within one ormore AOIs. Based on the data from the MAP server 12, the third-partyserver 26 operates to provide a service such as, for example, targetedadvertising. For example, the third-party server 26 may obtain anonymousaggregate profile data for one or more crowds located at a POI and thenprovide targeted advertising to known users located at the POI based onthe anonymous aggregate profile data. Note that while targetedadvertising is mentioned as an exemplary service provided by thethird-party server 26, other types of services may additionally oralternatively be provided. Other types of services that may be providedby the third-party server 26 will be apparent to one of ordinary skillin the art upon reading this disclosure.

Lastly, in this embodiment, the MAP server 12 includes a profileaugmentation function 40. The profile augmentation function 40 ispreferably implemented in software, but is not limited thereto. Asdiscussed below in detail, the profile augmentation function 40 operatesto augment user profiles of users, such as but not limited to the users20-1 through 20-N, based on aggregate profile data for crowds of usersand/or historical aggregate profile data. Using the user 20-1 as anexample, the profile augmentation function 40 operates to augment theuser profile of the user 20-1 based on aggregate profiles of crowds ofusers in which the user 20-1 is included, aggregate profiles of crowdsof users 20-1 that are nearby to the user 20-1, and/or historicalaggregate profile data for locations visited by the user 20-1.

FIG. 1B illustrates the system 10 providing sparse profile augmentationaccording to a second exemplary embodiment of the present disclosure. Inthis embodiment, the system 10 includes a MAP server 12, one or moreprofile servers 14, a location server 16, a number of mobile devices18-1 through 18-N having associated users 20-1 through 20-N, asubscriber device 22 having an associated subscriber 24, and athird-party server 26 communicatively coupled via a network 28. However,in this embodiment, the profile augmentation function 40 is implementedapart from the MAP server 12. Specifically, the profile augmentationfunction 40 may be implemented on any network device that is enabled tocommunicate with the MAP server 12 via the network 28. For example, theprofile augmentation function 40 may be implemented on the profileserver 14, one or more of the mobile devices 18-1 through 18-N, thesubscriber device 22, and/or the third-party server 26.

As discussed below in detail, in this embodiment, the profileaugmentation function 40 operates to augment user profiles of systemusers (i.e., one or more of the users 20-1 through 20-N), third-partyusers (e.g., one or more users associated with the profile server 14other than the users 20-1 through 20-N, the subscriber 24, and/or one ormore users associated with the third-party server 26), or a combinationthereof. More specifically, for a particular user, the profileaugmentation function 40 augments the user profile of the user based onaggregate profile data for crowds located at or near the currentlocation of the user and/or historical aggregate profile data for thecurrent location of the user.

Before describing the operation of the profile augmentation function 40in detail, FIGS. 2 through 22 provide a description of some of thefeatures of the MAP server 12 that may be utilized directly orindirectly by the profile augmentation function 40. FIG. 2 is a blockdiagram of the MAP server 12 of FIGS. 1A and 1B according to oneembodiment of the present disclosure. As illustrated, the MAP server 12includes an application layer 42, a business logic layer 44, and apersistence layer 46. The application layer 42 includes a user webapplication 48, a mobile client/server protocol component 50, and one ormore data Application Programming Interfaces (APIs) 52. The user webapplication 48 is preferably implemented in software and operates toprovide a web interface for users, such as the subscriber 24, to accessthe MAP server 12 via a web browser. The mobile client/server protocolcomponent 50 is preferably implemented in software and operates toprovide an interface between the MAP server 12 and the MAP clients 30-1through 30-N hosted by the mobile devices 18-1 through 18-N. The dataAPIs 52 enable third-party services, such as the third-party server 26,to access the MAP server 12.

The business logic layer 44 includes a profile manager 54, a locationmanager 56, a history manager 58, a crowd analyzer 60, and anaggregation engine 62, each of which is preferably implemented insoftware. In addition, in the embodiment of FIG. 1A, the business logiclayer 44 also includes the profile augmentation function 40. Note,however, that in the embodiment of FIG. 1B, the business logic layer 44does not include the profile augmentation function 40. The profilemanager 54 generally operates to obtain the user profiles of the users20-1 through 20-N directly or indirectly from the one or more profileservers 14 and store the user profiles in the persistence layer 46. Thelocation manager 56 operates to obtain the current locations of theusers 20-1 through 20-N including location updates. As discussed below,the current locations of the users 20-1 through 20-N may be obtaineddirectly from the mobile devices 18-1 through 18-N and/or obtained fromthe location server 16.

The history manager 58 generally operates to maintain a historicalrecord of anonymized user profile data by location. The crowd analyzer60 operates to form crowds of users. In one embodiment, the crowdanalyzer 60 utilizes a spatial crowd formation algorithm. However, thepresent disclosure is not limited thereto. In addition, the crowdanalyzer 60 may further characterize crowds to reflect degree offragmentation, best-case and worst-case degree of separation (DOS),and/or degree of bi-directionality of relationships. Still further, thecrowd analyzer 60 may also operate to track crowds. The aggregationengine 62 generally operates to provide aggregate profile data inresponse to requests from the mobile devices 18-1 through 18-N, thesubscriber device 22, the profile server 14, and/or the third-partyserver 26. The aggregate profile data may be historical aggregateprofile data for one or more geographic locations (e.g., one or morePOIs) or one or more geographic areas (e.g., one or more AOIs) oraggregate profile data for crowd(s) currently at one or more geographiclocations or in one or more geographic areas.

The persistence layer 46 includes an object mapping layer 64 and adatastore 66. The object mapping layer 64 is preferably implemented insoftware. The datastore 66 is preferably a relational database, which isimplemented in a combination of hardware (i.e., physical data storagehardware) and software (i.e., relational database software). In thisembodiment, the business logic layer 44 is implemented in anobject-oriented programming language such as, for example, Java. Assuch, the object mapping layer 64 operates to map objects used in thebusiness logic layer 44 to relational database entities stored in thedatastore 66. Note that, in one embodiment, data is stored in thedatastore 66 in a Resource Description Framework (RDF) compatibleformat.

In an alternative embodiment, rather than being a relational database,the datastore 66 may be implemented as an RDF datastore. Morespecifically, the RDF datastore may be compatible with RDF technologyadopted by Semantic Web activities. Namely, the RDF datastore may usethe Friend-Of-A-Friend (FOAF) vocabulary for describing people, theirsocial networks, and their interests. In this embodiment, the MAP server12 may be designed to accept raw FOAF files describing persons, theirfriends, and their interests. These FOAF files are currently output bysome social networking services such as Livejournal and Facebook. TheMAP server 12 may then persist RDF descriptions of the users 20-1through 20-N as a proprietary extension of the FOAF vocabulary thatincludes additional properties desired for the system 10.

FIG. 3 illustrates the MAP client 30-1 of FIGS. 1A and 1B in more detailaccording to one embodiment of the present disclosure. This discussionis equally applicable to the other MAP clients 30-2 through 30-N. Asillustrated, in this embodiment, the MAP client 30-1 includes a MAPaccess API 68, a MAP middleware component 70, and a mobile client/serverprotocol component 72. The MAP access API 68 is implemented in softwareand provides an interface by which the MAP client 30-1 and thethird-party applications 34-1 are enabled to access the MAP server 12.The MAP middleware component 70 is implemented in software and performsthe operations needed for the MAP client 30-1 to operate as an interfacebetween the MAP application 32-1 and the third-party applications 34-1at the mobile device 18-1 and the MAP server 12. The mobileclient/server protocol component 72 enables communication between theMAP client 30-1 and the MAP server 12 via a defined protocol.

FIG. 4 illustrates the operation of the system 10 of FIGS. 1A and 1B toprovide the user profile of the user 20-1 of the mobile device 18-1 tothe MAP server 12 according to one embodiment of the present disclosure.This discussion is equally applicable to user profiles of the otherusers 20-2 through 20-N of the other mobile devices 18-2 through 18-N.First, an authentication process is performed (step 1000). Forauthentication, in this embodiment, the mobile device 18-1 authenticateswith the profile server 14 (step 1000A) and the MAP server 12 (step1000B). In addition, the MAP server 12 authenticates with the profileserver 14 (step 1000C). Preferably, authentication is performed usingOpenID or similar technology. However, authentication may alternativelybe performed using separate credentials (e.g., username and password) ofthe user 20-1 for access to the MAP server 12 and the profile server 14.Assuming that authentication is successful, the profile server 14returns an authentication succeeded message to the MAP server 12 (step1000D), and the profile server 14 returns an authentication succeededmessage to the MAP client 30-1 of the mobile device 18-1 (step 1000E).

At some point after authentication is complete, a user profile processis performed such that a user profile of the user 20-1 is obtained fromthe profile server 14 and delivered to the MAP server 12 (step 1002). Inthis embodiment, the MAP client 30-1 of the mobile device 18-1 sends aprofile request to the profile server 14 (step 1002A). In response, theprofile server 14 returns the user profile of the user 20-1 to themobile device 18-1 (step 1002B). The MAP client 30-1 of the mobiledevice 18-1 then sends the user profile of the user 20-1 to the MAPserver 12 (step 1002C). Note that while in this embodiment the MAPclient 30-1 sends the complete user profile of the user 20-1 to the MAPserver 12, in an alternative embodiment, the MAP client 30-1 may filterthe user profile of the user 20-1 according to criteria specified by theuser 20-1. For example, the user profile of the user 20-1 may includedemographic information, general interests, music interests, and movieinterests, and the user 20-1 may specify that the demographicinformation or some subset thereof is to be filtered, or removed, beforesending the user profile to the MAP server 12.

Upon receiving the user profile of the user 20-1 from the MAP client30-1 of the mobile device 18-1, the profile manager 54 of the MAP server12 processes the user profile (step 1002D). More specifically, in thepreferred embodiment, the profile manager 54 includes social networkhandlers for the social network services supported by the MAP server 12.Thus, for example, if the MAP server 12 supports user profiles fromFacebook®, MySpace®, and LinkedIN®, the profile manager 54 may include aFacebook handler, a MySpace handler, and a LinkedIN handler. The socialnetwork handlers process user profiles to generate user profiles for theMAP server 12 that include lists of keywords for each of a number ofprofile categories. The profile categories may be the same for each ofthe social network handlers or different for each of the social networkhandlers. Thus, for this example assume that the user profile of theuser 20-1 is from Facebook. The profile manager 54 uses a Facebookhandler to process the user profile of the user 20-1 to map the userprofile of the user 20-1 from Facebook to a user profile for the MAPserver 12 including lists of keywords for a number of predefined profilecategories. For example, for the Facebook handler, the profilecategories may be a demographic profile category, a social interactionprofile category, a general interests profile category, a musicinterests profile category, and a movie interests profile category. Assuch, the user profile of the user 20-1 from Facebook may be processedby the Facebook handler of the profile manager 54 to create a list ofkeywords such as, for example, liberal, High School Graduate, 35-44,College Graduate, etc. for the demographic profile category, a list ofkeywords such as Seeking Friendship for the social interaction profilecategory, a list of keywords such as politics, technology, photography,books, etc. for the general interests profile category, a list ofkeywords including music genres, artist names, album names, or the likefor the music interests profile category, and a list of keywordsincluding movie titles, actor or actress names, director names, moviegenres, or the like for the movie interests profile category. In oneembodiment, the profile manager 54 may use natural language processingor semantic analysis. For example, if the Facebook user profile of theuser 20-1 states that the user 20-1 is 20 years old, semantic analysismay result in the keyword of 18-24 years old being stored in the userprofile of the user 20-1 for the MAP server 12.

After processing the user profile of the user 20-1, the profile manager54 of the MAP server 12 stores the resulting user profile for the user20-1 (step 1002E). More specifically, in one embodiment, the MAP server12 stores user records for the users 20-1 through 20-N in the datastore66 (FIG. 2). The user profile of the user 20-1 is stored in the userrecord of the user 20-1. The user record of the user 20-1 includes aunique identifier of the user 20-1, the user profile of the user 20-1,and, as discussed below, a current location of the user 20-1. Note thatthe user profile of the user 20-1 may be updated as desired. Forexample, in one embodiment, the user profile of the user 20-1 is updatedby repeating step 1002 each time the user 20-1 activates the MAPapplication 32-1.

Note that the while the discussion herein focuses on an embodiment wherethe user profiles of the users 20-1 through 20-N are obtained from theone or more profile servers 14, the user profiles of the users 20-1through 20-N may be obtained in any desired manner. For example, in onealternative embodiment, the user 20-1 may identify one or more favoritewebsites. The profile manager 54 of the MAP server 12 may then crawl theone or more favorite websites of the user 20-1 to obtain keywordsappearing in the one or more favorite websites of the user 20-1. Thesekeywords may then be stored as the user profile of the user 20-1.

At some point, a process is performed such that a current location ofthe mobile device 18-1 and thus a current location of the user 20-1 isobtained by the MAP server 12 (step 1004). In this embodiment, the MAPapplication 32-1 of the mobile device 18-1 obtains the current locationof the mobile device 18-1 from the location function 36-1 of the mobiledevice 18-1. The MAP application 32-1 then provides the current locationof the mobile device 18-1 to the MAP client 30-1, and the MAP client30-1 then provides the current location of the mobile device 18-1 to theMAP server 12 (step 1004A). Note that step 1004A may be repeatedperiodically or in response to a change in the current location of themobile device 18-1 in order for the MAP application 32-1 to providelocation updates for the user 20-1 to the MAP server 12.

In response to receiving the current location of the mobile device 18-1,the location manager 56 of the MAP server 12 stores the current locationof the mobile device 18-1 as the current location of the user 20-1 (step1004B). More specifically, in one embodiment, the current location ofthe user 20-1 is stored in the user record of the user 20-1 maintainedin the datastore 66 of the MAP server 12. Note that in the preferredembodiment only the current location of the user 20-1 is stored in theuser record of the user 20-1. In this manner, the MAP server 12maintains privacy for the user 20-1 since the MAP server 12 does notmaintain a historical record of the location of the user 20-1. Asdiscussed below in detail, historical data maintained by the MAP server12 is anonymized in order to maintain the privacy of the users 20-1through 20-N.

In addition to storing the current location of the user 20-1, thelocation manager 56 sends the current location of the user 20-1 to thelocation server 16 (step 1004C). In this embodiment, by providinglocation updates to the location server 16, the MAP server 12 in returnreceives location updates for the user 20-1 from the location server 16.This is particularly beneficial when the mobile device 18-1 does notpermit background processes, which is the case for the Apple® iPhone. Assuch, if the mobile device 18-1 is an Apple® iPhone or similar devicethat does not permit background processes, the MAP application 32-1 willnot be able to provide location updates for the user 20-1 to the MAPserver 12 unless the MAP application 32-1 is active.

Therefore, when the MAP application 32-1 is not active, otherapplications running on the mobile device 18-1 (or some other device ofthe user 20-1) may directly or indirectly provide location updates tothe location server 16 for the user 20-1. This is illustrated in step1006 where the location server 16 receives a location update for theuser 20-1 directly or indirectly from another application running on themobile device 18-1 or an application running on another device of theuser 20-1 (step 1006A). The location server 16 then provides thelocation update for the user 20-1 to the MAP server 12 (step 1006B). Inresponse, the location manager 56 updates and stores the currentlocation of the user 20-1 in the user record of the user 20-1 (step1006C). In this manner, the MAP server 12 is enabled to obtain locationupdates for the user 20-1 even when the MAP application 32-1 is notactive at the mobile device 18-1.

FIG. 5 illustrates the operation of the system 10 of FIGS. 1A and 1B toprovide the user profile of the user 20-1 of the mobile device 18-1according to another embodiment of the present disclosure. Thisdiscussion is equally applicable to user profiles of the other users20-2 through 20-N of the other mobile devices 18-2 through 18-N. First,an authentication process is performed (step 1100). For authentication,in this embodiment, the mobile device 18-1 authenticates with the MAPserver 12 (step 1100A), and the MAP server 12 authenticates with theprofile server 14 (step 1100B). Preferably, authentication is performedusing OpenID or similar technology. However, authentication mayalternatively be performed using separate credentials (e.g., usernameand password) of the user 20-1 for access to the MAP server 12 and theprofile server 14. Assuming that authentication is successful, theprofile server 14 returns an authentication succeeded message to the MAPserver 12 (step 1100C), and the MAP server 12 returns an authenticationsucceeded message to the MAP client 30-1 of the mobile device 18-1 (step1100D).

At some point after authentication is complete, a user profile processis performed such that a user profile of the user 20-1 is obtained fromthe profile server 14 and delivered to the MAP server 12 (step 1102). Inthis embodiment, the profile manager 54 of the MAP server 12 sends aprofile request to the profile server 14 (step 1102A). In response, theprofile server 14 returns the user profile of the user 20-1 to theprofile manager 54 of the MAP server 12 (step 1102B). Note that while inthis embodiment the profile server 14 returns the complete user profileof the user 20-1 to the MAP server 12, in an alternative embodiment, theprofile server 14 may return a filtered version of the user profile ofthe user 20-1 to the MAP server 12. The profile server 14 may filter theuser profile of the user 20-1 according to criteria specified by theuser 20-1. For example, the user profile of the user 20-1 may includedemographic information, general interests, music interests, and movieinterests, and the user 20-1 may specify that the demographicinformation or some subset thereof is to be filtered, or removed, beforesending the user profile to the MAP server 12.

Upon receiving the user profile of the user 20-1, the profile manager 54of the MAP server 12 processes the user profile (step 1102C). Morespecifically, as discussed above, in the preferred embodiment, theprofile manager 54 includes social network handlers for the socialnetwork services supported by the MAP server 12. The social networkhandlers process user profiles to generate user profiles for the MAPserver 12 that include lists of keywords for each of a number of profilecategories. The profile categories may be the same for each of thesocial network handlers or different for each of the social networkhandlers.

After processing the user profile of the user 20-1, the profile manager54 of the MAP server 12 stores the resulting user profile for the user20-1 (step 1102D). More specifically, in one embodiment, the MAP server12 stores user records for the users 20-1 through 20-N in the datastore66 (FIG. 2). The user profile of the user 20-1 is stored in the userrecord of the user 20-1. The user record of the user 20-1 includes aunique identifier of the user 20-1, the user profile of the user 20-1,and, as discussed below, a current location of the user 20-1. Note thatthe user profile of the user 20-1 may be updated as desired. Forexample, in one embodiment, the user profile of the user 20-1 is updatedby repeating step 1102 each time the user 20-1 activates the MAPapplication 32-1.

Note that while the discussion herein focuses on an embodiment where theuser profiles of the users 20-1 through 20-N are obtained from the oneor more profile servers 14, the user profiles of the users 20-1 through20-N may be obtained in any desired manner. For example, in onealternative embodiment, the user 20-1 may identify one or more favoritewebsites. The profile manager 54 of the MAP server 12 may then crawl theone or more favorite websites of the user 20-1 to obtain keywordsappearing in the one or more favorite websites of the user 20-1. Thesekeywords may then be stored as the user profile of the user 20-1.

At some point, a process is performed such that a current location ofthe mobile device 18-1 and thus a current location of the user 20-1 isobtained by the MAP server 12 (step 1104). In this embodiment, the MAPapplication 32-1 of the mobile device 18-1 obtains the current locationof the mobile device 18-1 from the location function 36-1 of the mobiledevice 18-1. The MAP application 32-1 then provides the current locationof the user 20-1 of the mobile device 18-1 to the location server 16(step 1104A). Note that step 1104A may be repeated periodically or inresponse to changes in the location of the mobile device 18-1 in orderto provide location updates for the user 20-1 to the MAP server 12. Thelocation server 16 then provides the current location of the user 20-1to the MAP server 12 (step 1104B). The location server 16 may providethe current location of the user 20-1 to the MAP server 12 automaticallyin response to receiving the current location of the user 20-1 from themobile device 18-1 or in response to a request from the MAP server 12.

In response to receiving the current location of the mobile device 18-1,the location manager 56 of the MAP server 12 stores the current locationof the mobile device 18-1 as the current location of the user 20-1 (step1104C). More specifically, in one embodiment, the current location ofthe user 20-1 is stored in the user record of the user 20-1 maintainedin the datastore 66 of the MAP server 12. Note that in the preferredembodiment only the current location of the user 20-1 is stored in theuser record of the user 20-1. In this manner, the MAP server 12maintains privacy for the user 20-1 since the MAP server 12 does notmaintain a historical record of the location of the user 20-1. Asdiscussed below in detail, historical data maintained by the MAP server12 is anonymized in order to maintain the privacy of the users 20-1through 20-N.

As discussed above, the use of the location server 16 is particularlybeneficial when the mobile device 18-1 does not permit backgroundprocesses, which is the case for the Apple® iPhone. As such, if themobile device 18-1 is an Apple® iPhone or similar device that does notpermit background processes, the MAP application 32-1 will not providelocation updates for the user 20-1 to the location server 16 unless theMAP application 32-1 is active. However, other applications running onthe mobile device 18-1 (or some other device of the user 20-1) mayprovide location updates to the location server 16 for the user 20-1when the MAP application 32-1 is not active. This is illustrated in step1106 where the location server 16 receives a location update for theuser 20-1 from another application running on the mobile device 18-1 oran application running on another device of the user 20-1 (step 1106A).The location server 16 then provides the location update for the user20-1 to the MAP server 12 (step 1106B). In response, the locationmanager 56 updates and stores the current location of the user 20-1 inthe user record of the user 20-1 (step 1106C). In this manner, the MAPserver 12 is enabled to obtain location updates for the user 20-1 evenwhen the MAP application 32-1 is not active at the mobile device 18-1.

Using the current locations of the users 20-1 through 20-N and the userprofiles of the users 20-1 through 20-N, the MAP server 12 can provide anumber of features. A first feature that may be provided by the MAPserver 12 is historical storage of anonymized user profile data bylocation. This historical storage of anonymized user profile data bylocation is performed by the history manager 58 of the MAP server 12.More specifically, as illustrated in FIG. 6, in the preferredembodiment, the history manager 58 maintains lists of users located in anumber of geographic regions, or “location buckets.” Preferably, thelocation buckets are defined by floor(latitude, longitude) to a desiredresolution. The higher the resolution, the smaller the size of thelocation buckets. For example, in one embodiment, the location bucketsare defined by floor(latitude, longitude) to a resolution of1/10,000^(th) of a degree such that the lower left-hand corners of thesquares illustrated in FIG. 6 are defined by the floor(latitude,longitude) values at a resolution of 1/10,000^(th) of a degree. In theexample of FIG. 6, users are represented as dots, and location buckets74 through 90 have lists of 1, 3, 2, 1, 1, 2, 1, 2, and 3 users,respectively.

As discussed below in detail, at a predetermined time interval such as,for example, 15 minutes, the history manager 58 makes a copy of thelists of users in the location buckets, anonymizes the user profiles ofthe users in the lists to provide anonymized user profile data for thecorresponding location buckets, and stores the anonymized user profiledata in a number of history objects. In one embodiment, a history objectis stored for each location bucket having at least one user. In anotherembodiment, a quadtree algorithm is used to efficiently create historyobjects for geographic regions (i.e., groups of one or more adjoininglocation buckets).

FIG. 7 graphically illustrates a scenario where a user moves from onelocation bucket to another, namely, from the location bucket 76 to thelocation bucket 78. As discussed below in detail, assuming that themovement occurs during the time interval between persistence of thehistorical data by the history manager 58, the user is included on boththe list for the location bucket 76 and the list for the location bucket78. However, the user is flagged or otherwise marked as inactive for thelocation bucket 76 and active for the location bucket 78. As discussedbelow, after making a copy of the lists for the location buckets to beused to persist the historical data, users flagged as inactive areremoved from the lists of users for the location buckets. Thus, in sum,once a user moves from the location bucket 76 to the location bucket 78,the user remains in the list for the location bucket 76 until thepredetermined time interval has expired and the anonymized user profiledata is persisted. The user is then removed from the list for thelocation bucket 76.

FIG. 8 is a flow chart illustrating the operation of a foreground“bucketization” process performed by the history manager 58 to maintainthe lists of users for location buckets according to one embodiment ofthe present disclosure. First, the history manager 58 receives alocation update for a user (step 1200). For this discussion, assume thatthe location update is received for the user 20-1. The history manager58 then determines a location bucket corresponding to the updatedlocation (i.e., the current location) of the user 20-1 (step 1202). Inthe preferred embodiment, the location of the user 20-1 is expressed aslatitude and longitude coordinates, and the history manager 58determines the location bucket by determining floor values of thelatitude and longitude coordinates, which can be written asfloor(latitude, longitude) at a desired resolution. As an example, ifthe latitude and longitude coordinates for the location of the user 20-1are 32.24267381553987 and −111.9249213502935, respectively, and thefloor values are to be computed to a resolution of 1/10,000^(th) of adegree, then the floor values for the latitude and longitude coordinatesare 32.2426 and −111.9249. The floor values for the latitude andlongitude coordinates correspond to a particular location bucket.

After determining the location bucket for the location of the user 20-1,the history manager 58 determines whether the user 20-1 is new to thelocation bucket (step 1204). In other words, the history manager 58determines whether the user 20-1 is already on the list of users for thelocation bucket. If the user 20-1 is new to the location bucket, thehistory manager 58 creates an entry for the user 20-1 in the list ofusers for the location bucket (step 1206). Returning to step 1204, ifthe user 20-1 is not new to the location bucket, the history manager 58updates the entry for the user 20-1 in the list of users for thelocation bucket (step 1208). At this point, whether proceeding from step1206 or 1208, the user 20-1 is flagged as active in the list of usersfor the location bucket (step 1210).

The history manager 58 then determines whether the user 20-1 has movedfrom another location bucket (step 1212). More specifically, the historymanager 58 determines whether the user 20-1 is included in the list ofusers for another location bucket and is currently flagged as active inthat list. If the user 20-1 has not moved from another location bucket,the process proceeds to step 1216. If the user 20-1 has moved fromanother location bucket, the history manager 58 flags the user 20-1 asinactive in the list of users for the other location bucket from whichthe user 20-1 has moved (step 1214).

At this point, whether proceeding from step 1212 or 1214, the historymanager 58 determines whether it is time to persist (step 1216). Morespecifically, as mentioned above, the history manager 58 operates topersist history objects at a predetermined time interval such as, forexample, every 15 minutes. Thus, the history manager 58 determines thatit is time to persist if the predetermined time interval has expired. Ifit is not time to persist, the process returns to step 1200 and isrepeated for a next received location update, which will typically befor another user. If it is time to persist, the history manager 58creates a copy of the lists of users for the location buckets and passesthe copy of the lists to an anonymization and storage process (step1218). In this embodiment, the anonymization and storage process is aseparate process performed by the history manager 58. The historymanager 58 then removes inactive users from the lists of users for thelocation buckets (step 1220). The process then returns to step 1200 andis repeated for a next received location update, which will typically befor another user.

FIG. 9 is a flow chart illustrating the anonymization and storageprocess performed by the history manager 58 at the predetermined timeinterval according to one embodiment of the present disclosure. First,the anonymization and storage process receives the copy of the lists ofusers for the location buckets passed to the anonymization and storageprocess by the bucketization process of FIG. 8 (step 1300). Next,anonymization is performed for each of the location buckets having atleast one user in order to provide anonymized user profile data for thelocation buckets (step 1302). Anonymization prevents connectinginformation stored in the history objects stored by the history manager58 back to the users 20-1 through 20-N or at least substantiallyincreases a difficulty of connecting information stored in the historyobjects stored by the history manager 58 back to the users 20-1 through20-N. Lastly, the anonymized user profile data for the location bucketsis stored in a number of history objects (step 1304). In one embodiment,a separate history object is stored for each of the location buckets,where the history object of a location bucket includes the anonymizeduser profile data for the location bucket. In another embodiment, asdiscussed below, a quadtree algorithm is used to efficiently store theanonymized user profile data in a number of history objects such thateach history object stores the anonymized user profile data for one ormore location buckets.

FIG. 10 graphically illustrates one embodiment of the anonymizationprocess of step 1302 of FIG. 9. In this embodiment, anonymization isperformed by creating anonymous user records for the users in the listsof users for the location buckets. The anonymous user records are notconnected back to the users 20-1 through 20-N. More specifically, asillustrated in FIG. 10, each user in the lists of users for the locationbuckets has a corresponding user record 92. The user record 92 includesa unique user identifier (ID) for the user, the current location of theuser, and the user profile of the user. The user profile includeskeywords for each of a number of profile categories, which are stored incorresponding profile category records 94-1 through 94-M. Each of theprofile category records 94-1 through 94-M includes a user ID for thecorresponding user which may be the same user ID used in the user record92, a category ID, and a list of keywords for the profile category.

For anonymization, an anonymous user record 96 is created from the userrecord 92. In the anonymous user record 96, the user ID is replaced witha new user ID that is not connected back to the user, which is alsoreferred to herein as an anonymous user ID. This new user ID isdifferent than any other user ID used for anonymous user records createdfrom the user record of the user for any previous or subsequent timeperiods. In this manner, anonymous user records for a single usercreated over time cannot be linked to one another.

In addition, anonymous profile category records 98-1 through 98-M arecreated for the profile category records 94-1 through 94-M. In theanonymous profile category records 98-1 through 98-M, the user ID isreplaced with a new user ID, which may be the same new user ID includedin the anonymous user record 96. The anonymous profile category records98-1 through 98-M include the same category IDs and lists of keywords asthe corresponding profile category records 94-1 through 94-M. Note thatthe location of the user is not stored in the anonymous user record 96.With respect to location, it is sufficient that the anonymous userrecord 96 is linked to a location bucket.

In another embodiment, the history manager 58 performs anonymization ina manner similar to that described above with respect to FIG. 10.However, in this embodiment, the profile category records for the groupof users in a location bucket, or the group of users in a number oflocation buckets representing a node in a quadtree data structure (seebelow), may be selectively randomized among the anonymous user recordsof those users. In other words, each anonymous user record would have auser profile including a selectively randomized set of profile categoryrecords (including keywords) from a cumulative list of profile categoryrecords for all of the users in the group.

In yet another embodiment, rather than creating anonymous user records96 for the users in the lists maintained for the location buckets, thehistory manager 58 may perform anonymization by storing an aggregateuser profile for each location bucket, or each group of location bucketsrepresenting a node in a quadtree data structure (see below). Theaggregate user profile may include a list of all keywords andpotentially the number of occurrences of each keyword in the userprofiles of the corresponding group of users. In this manner, the datastored by the history manager 58 is not connected back to the users 20-1through 20-N.

FIG. 11 is a flow chart illustrating the storing step (step 1304) ofFIG. 9 in more detail according to one embodiment of the presentdisclosure. First, the history manager 58 processes the location bucketsusing a quadtree algorithm to produce a quadtree data structure, whereeach node of the quadtree data structure includes one or more of thelocation buckets having a combined number of users that is at most apredefined maximum number of users (step 1400). The history manager 58then stores a history object for each node in the quadtree datastructure having at least one user (step 1402).

Each history object includes location information, timing information,data, and quadtree data structure information. The location informationincluded in the history object defines a combined geographic area of thelocation bucket(s) forming the corresponding node of the quadtree datastructure. For example, the location information may be latitude andlongitude coordinates for a northeast corner of the combined geographicarea of the node of the quadtree data structure and a southwest cornerof the combined geographic area for the node of the quadtree datastructure. The timing information includes information defining a timewindow for the history object, which may be, for example, a start timefor the corresponding time interval and an end time for thecorresponding time interval. The data includes the anonymized userprofile data for the users in the list(s) maintained for the locationbucket(s) forming the node of the quadtree data structure for which thehistory object is stored. In addition, the data may include a totalnumber of users in the location bucket(s) forming the node of thequadtree data structure. Lastly, the quadtree data structure informationincludes information defining a quadtree depth of the node in thequadtree data structure.

FIG. 12 is a flow chart illustrating a quadtree algorithm that may beused to process the location buckets to form the quadtree data structurein step 1400 of FIG. 11 according to one embodiment of the presentdisclosure. Initially, a geographic area served by the MAP server 12 isdivided into a number of geographic regions, each including multiplelocation buckets. These geographic regions are also referred to hereinas base quadtree regions. The geographic area served by the MAP server12 may be, for example, a city, a state, a country, or the like.Further, the geographic area may be the only geographic area served bythe MAP server 12 or one of a number of geographic areas served by theMAP server 12. Preferably, the base quadtree regions have a size of2^(n)×2^(n) location buckets, where n is an integer greater than orequal to 1.

In order to form the quadtree data structure, the history manager 58determines whether there are any more base quadtree regions to process(step 1500). If there are more base quadtree regions to process, thehistory manager 58 sets a current node to the next base quadtree regionto process, which for the first iteration is the first base quadtreeregion (step 1502). The history manager 58 then determines whether thenumber of users in the current node is greater than a predefined maximumnumber of users and whether a current quadtree depth is less than amaximum quadtree depth (step 1504). In one embodiment, the maximumquadtree depth may be reached when the current node corresponds to asingle location bucket. However, the maximum quadtree depth may be setsuch that the maximum quadtree depth is reached before the current nodereaches a single location bucket.

If the number of users in the current node is greater than thepredefined maximum number of users and the current quadtree depth isless than a maximum quadtree depth, the history manager 58 creates anumber of child nodes for the current node (step 1506). Morespecifically, the history manager 58 creates a child node for eachquadrant of the current node. The users in the current node are thenassigned to the appropriate child nodes based on the location buckets inwhich the users are located (step 1508), and the current node is thenset to the first child node (step 1510). At this point, the processreturns to step 1504 and is repeated.

Once the number of users in the current node is not greater than thepredefined maximum number of users or the maximum quadtree depth hasbeen reached, the history manager 58 determines whether the current nodehas any more sibling nodes (step 1512). Sibling nodes are child nodes ofthe same parent node. If so, the history manager 58 sets the currentnode to the next sibling node of the current node (step 1514), and theprocess returns to step 1504 and is repeated. Once there are no moresibling nodes to process, the history manager 58 determines whether thecurrent node has a parent node (step 1516). If so, since the parent nodehas already been processed, the history manager 58 determines whetherthe parent node has any sibling nodes that need to be processed (step1518). If the parent node has any sibling nodes that need to beprocessed, the history manager 58 sets the next sibling node of theparent node to be processed as the current node (step 1520). From thispoint, the process returns to step 1504 and is repeated. Returning tostep 1516, if the current node does not have a parent node, the processreturns to step 1500 and is repeated until there are no more basequadtree regions to process. Once there are no more base quadtreeregions to process, the finished quadtree data structure is returned tothe process of FIG. 11 such that the history manager 58 can then storethe history objects for nodes in the quadtree data structure having atleast one user (step 1522).

FIGS. 13A through 13E graphically illustrate the process of FIG. 12 forthe generation of the quadtree data structure for one exemplary basequadtree region 100. FIG. 13A illustrates the base quadtree region 100.As illustrated, the base quadtree region 100 is an 8×8 square oflocation buckets, where each of the small squares represents a locationbucket. First, the history manager 58 determines whether the number ofusers in the base quadtree region 100 is greater than the predeterminedmaximum number of users. In this example, the predetermined maximumnumber of users is 3. Since the number of users in the base quadtreeregion 100 is greater than 3, the history manager 58 divides the basequadtree region 100 into four child nodes 102-1 through 102-4, asillustrated in FIG. 13B.

Next, the history manager 58 determines whether the number of users inthe child node 102-1 is greater than the predetermined maximum, whichagain for this example is 3. Since the number of users in the child node102-1 is greater than 3, the history manager 58 divides the child node102-1 into four child nodes 104-1 through 104-4, as illustrated in FIG.13C. The child nodes 104-1 through 104-4 are children of the child node102-1. The history manager 58 then determines whether the number ofusers in the child node 104-1 is greater than the predetermined maximumnumber of users, which again is 3. Since there are more than 3 users inthe child node 104-1, the history manager 58 further divides the childnode 104-1 into four child nodes 106-1 through 106-N, as illustrated inFIG. 13D.

The history manager 58 then determines whether the number of users inthe child node 106-1 is greater than the predetermined maximum number ofusers, which again is 3. Since the number of users in the child node106-1 is not greater than the predetermined maximum number of users, thechild node 106-1 is identified as a node for the finished quadtree datastructure, and the history manager 58 proceeds to process the siblingnodes of the child node 106-1, which are the child nodes 106-2 through106-4. Since the number of users in each of the child nodes 106-2through 106-4 is less than the predetermined maximum number of users,the child nodes 106-2 through 106-4 are also identified as nodes for thefinished quadtree data structure.

Once the history manager 58 has finished processing the child nodes106-1 through 106-4, the history manager 58 identifies the parent nodeof the child nodes 106-1 through 106-4, which in this case is the childnode 104-1. The history manager 58 then processes the sibling nodes ofthe child node 104-1, which are the child nodes 104-2 through 104-4. Inthis example, the number of users in each of the child nodes 104-2through 104-4 is less than the predetermined maximum number of users. Assuch, the child nodes 104-2 through 104-4 are identified as nodes forthe finished quadtree data structure.

Once the history manager 58 has finished processing the child nodes104-1 through 104-4, the history manager 58 identifies the parent nodeof the child nodes 104-1 through 104-4, which in this case is the childnode 102-1. The history manager 58 then processes the sibling nodes ofthe child node 102-1, which are the child nodes 102-2 through 102-4.More specifically, the history manager 58 determines that the child node102-2 includes more than the predetermined maximum number of users and,as such, divides the child node 102-2 into four child nodes 108-1through 108-4, as illustrated in FIG. 13E. Because the number of usersin each of the child nodes 108-1 through 108-4 is not greater than thepredetermined maximum number of users, the child nodes 108-1 through108-4 are identified as nodes for the finished quadtree data structure.Then, the history manager 58 proceeds to process the child nodes 102-3and 102-4. Since the number of users in each of the child nodes 102-3and 102-4 is not greater than the predetermined maximum number of users,the child nodes 102-3 and 102-4 are identified as nodes for the finishedquadtree data structure. Thus, at completion, the quadtree datastructure for the base quadtree region 100 includes the child nodes106-1 through 106-4, the child nodes 104-2 through 104-4, the childnodes 108-1 through 108-4, and the child nodes 102-3 and 102-4, asillustrated in FIG. 13E.

As discussed above, the history manager 58 stores a history object foreach of the nodes in the quadtree data structure including at least oneuser. As such, in this example, the history manager 58 stores historyobjects for the child nodes 106-2 and 106-3, the child nodes 104-2 and104-4, the child nodes 108-1 and 108-4, and the child node 102-3.However, no history objects are stored for the nodes that do not haveany users (i.e., the child nodes 106-1 and 106-4, the child node 104-3,the child nodes 108-2 and 108-3, and the child node 102-4).

FIG. 14 illustrates the operation of the system 10 of FIGS. 1A and 1Bwherein a mobile device is enabled to request and receive historicaldata from the MAP server 12 according to one embodiment of the presentdisclosure. Note that the MAP server 12 may operate in a similar mannerto process requests for historical data from other devices such as thesubscriber device 22, the third-party server 26, and/or the profileserver 14. As illustrated, in this embodiment, the MAP application 32-1of the mobile device 18-1 sends a historical request to the MAP client30-1 of the mobile device 18-1 (step 1600). In one embodiment, thehistorical request identifies either a POI or an AOI and a time window.A POI is a geographic point whereas an AOI is a geographic area. In oneembodiment, the historical request is for a POI and a time window, wherethe POI is a POI corresponding to the current location of the user 20-1,a POI selected from a list of POIs defined by the user 20-1 of themobile device 18-1, a POI selected from a list of POIs defined by theMAP application 32-1 or the MAP server 12, a POI selected by the user20-1 from a map, a POI implicitly defined via a separate application(e.g., POI is implicitly defined as the location of the nearestStarbucks coffee house in response to the user 20-1 performing a Googlesearch for “Starbucks”), or the like. If the POI is selected from a listof POIs, the list of POIs may include static POIs which may be definedby street addresses or latitude and longitude coordinates, dynamic POIswhich may be defined as the current locations of one or more friends ofthe user 20-1, or both.

In another embodiment, the historical request is for an AOI and a timewindow, where the AOI may be an AOI of a geographic area of a predefinedshape and size centered at the current location of the user 20-1, an AOIselected from a list of AOIs defined by the user 20-1, an AOI selectedfrom a list of AOIs defined by the MAP application 32-1 or the MAPserver 12, an AOI selected by the user 20-1 from a map, an AOIimplicitly defined via a separate application (e.g., AOI is implicitlydefined as an area of a predefined shape and size centered at thelocation of the nearest Starbucks coffee house in response to the user20-1 performing a Google search for “Starbucks”), or the like. If theAOI is selected from a list of AOIs, the list of AOIs may include staticAOIs, dynamic AOIs which may be defined as areas of a predefined shapeand size centered at the current locations of one or more friends of theuser 20-1, or both. Note that the POI or AOI of the historical requestmay be selected by the user 20-1 via the MAP application 32-1. In yetanother embodiment, the MAP application 32-1 automatically uses thecurrent location of the user 20-1 as the POI or as a center point for anAOI of a predefined shape and size.

The time window for the historical request may be relative to thecurrent time. For example, the time window may be the last hour, thelast day, the last week, the last month, or the like. Alternatively, thetime window may be an arbitrary time window selected by the user 20-1such as, for example, yesterday from 7 pm-9 pm, last Friday, last week,or the like. Note that while in this example the historical requestincludes a single POI or AOI and a single time window, the historicalrequest may include multiple POIs or AOIs and/or multiple time windows.

In one embodiment, the historical request is made in response to userinput from the user 20-1 of the mobile device 18-1. For instance, in oneembodiment, the user 20-1 selects either a POI or an AOI and a timewindow and then instructs the MAP application 32-1 to make thehistorical request by, for example, selecting a corresponding button ona graphical user interface. In another embodiment, the historicalrequest is made automatically in response to some event such as, forexample, opening the MAP application 32-1.

Upon receiving the historical request from the MAP application 32-1, theMAP client 30-1 forwards the historical request to the MAP server 12(step 1602). Note that the MAP client 30-1 may, in some cases, processthe historical request from the MAP application 32-1 before forwardingthe historical request to the MAP server 12. For example, if thehistorical request from the MAP application 32-1 is for multiplePOIs/AOIs and/or for multiple time windows, the MAP client 30-1 mayprocess the historical request from the MAP application 32-1 to producemultiple historical requests to be sent to the MAP server 12. Forinstance, a separate historical request may be produced for each POI/AOIand time window combination. However, for this discussion, thehistorical request is for a single POI or AOI for a single time window.

Upon receiving the historical request from the MAP client 30-1, the MAPserver 12 processes the historical request (step 1604). Morespecifically, the historical request is processed by the history manager58 of the MAP server 12. First, the history manager 58 obtains historyobjects that are relevant to the historical request from the datastore66 of the MAP server 12. The relevant history objects are those recordedfor locations relevant to the POI or AOI and the time window for thehistorical request. The history manager 58 then processes the relevanthistory objects to provide historical aggregate profile data for the POIor AOI. In this embodiment, the historical aggregate profile data isbased on the user profiles of the anonymous user records in the relevanthistory objects as compared to the user profile of the user 20-1 or aselect subset thereof. In another embodiment, the historical aggregateprofile data is based on the user profiles of the anonymous user recordsin the relevant history objects as compared to a target user profiledefined or otherwise specified by the user 20-1 or as compared to oneanother. Once the MAP server 12 has processed the historical request,the MAP server 12 returns the resulting historical aggregate profiledata to the MAP client 30-1 (step 1606). Upon receiving the historicalaggregate profile data, the MAP client 30-1 passes the historicalaggregate profile data to the MAP application 32-1 (step 1608). The MAPapplication 32-1 then presents the historical aggregate profile data tothe user 20-1 (step 1610).

FIG. 15 begins a discussion of the operation of the crowd analyzer 60 toform crowds of users according to one embodiment of the presentdisclosure. Specifically, FIG. 15 is a flow chart for a spatial crowdformation process according to one embodiment of the present disclosure.Note that, in one embodiment, this process is performed in response to arequest for crowd data for a POI or an AOI. In another embodiment, thisprocess may be performed proactively by the crowd analyzer 60 as, forexample, a background process.

First, the crowd analyzer 60 establishes a bounding box for the crowdformation process (step 1700). Note that while a bounding box is used inthis example, other geographic shapes may be used to define a boundingregion for the crowd formation process (e.g., a bounding circle). In oneembodiment, if crowd formation is performed in response to a specificrequest, the bounding box is established based on the POI or the AOI ofthe request. If the request is for a POI, then the bounding box is ageographic area of a predetermined size centered at the POI. If therequest is for an AOI, the bounding box is the AOI. Alternatively, ifthe crowd formation process is performed proactively, the bounding boxis a bounding box of a predefined size.

The crowd analyzer 60 then creates a crowd for each individual user inthe bounding box (step 1702). More specifically, the crowd analyzer 60queries the datastore 66 of the MAP server 12 to identify userscurrently located within the bounding box. Then, a crowd of one user iscreated for each user currently located within the bounding box. Next,the crowd analyzer 60 determines the two closest crowds in the boundingbox (step 1704) and determines a distance between the two crowds (step1706). The distance between the two crowds is a distance between crowdcenters of the two crowds. Note that the crowd center of a crowd of oneis the current location of the user in the crowd. The crowd analyzer 60then determines whether the distance between the two crowds is less thanan optimal inclusion distance (step 1708). In this embodiment, theoptimal inclusion distance is a predefined static distance. If thedistance between the two crowds is less than the optimal inclusiondistance, the crowd analyzer 60 combines the two crowds (step 1710) andcomputes a new crowd center for the resulting crowd (step 1712). Thecrowd center may be computed based on the current locations of the usersin the crowd using a center of mass algorithm. At this point the processreturns to step 1704 and is repeated until the distance between the twoclosest crowds is not less than the optimal inclusion distance. At thatpoint, the crowd analyzer 60 discards any crowds with less than threeusers (step 1714). Note that throughout this disclosure crowds are onlymaintained if the crowds include three or more users. However, whilethree users is the preferred minimum number of users in a crowd, thepresent disclosure is not limited thereto. The minimum number of usersin a crowd may be defined as any number greater than or equal to twousers.

FIGS. 16A through 16D graphically illustrate the crowd formation processof FIG. 15 for an exemplary bounding box 110. In FIGS. 16A through 16D,crowds are noted by dashed circles, and the crowd centers are noted bycross-hairs (+). As illustrated in FIG. 16A, initially, the crowdanalyzer 60 creates crowds 112 through 120 for the users in thegeographic area, where, at this point, each of the crowds 112 through120 includes one user. The current locations of the users are the crowdcenters of the crowds 112 through 120. Next, the crowd analyzer 60determines the two closest crowds and a distance between the two closestcrowds. In this example, at this point, the two closest crowds arecrowds 114 and 116, and the distance between the two closest crowds 114and 116 is less than the optimal inclusion distance. As such, the twoclosest crowds 114 and 116 are combined by merging crowd 116 into crowd114, and a new crowd center (+) is computed for the crowd 114, asillustrated in FIG. 16B. Next, the crowd analyzer 60 again determinesthe two closest crowds, which are now crowds 112 and 114. The crowdanalyzer 60 then determines a distance between the crowds 112 and 114.Since the distance is less than the optimal inclusion distance, thecrowd analyzer 60 combines the two crowds 112 and 114 by merging thecrowd 112 into the crowd 114, and a new crowd center (+) is computed forthe crowd 114, as illustrated in FIG. 16C. At this point, there are nomore crowds separated by less than the optimal inclusion distance. Assuch, the crowd analyzer 60 discards crowds having less than threeusers, which in this example are crowds 118 and 120. As a result, at theend of the crowd formation process, the crowd 114 has been formed withthree users, as illustrated in FIG. 16D.

FIGS. 17A through 17D illustrate a flow chart for a spatial crowdformation process according to another embodiment of the presentdisclosure. In this embodiment, the spatial crowd formation process istriggered in response to receiving a location update for one of theusers 20-1 through 20-N and is preferably repeated for each locationupdate received for the users 20-1 through 20-N. As such, first, thecrowd analyzer 60 receives a location update, or a new location, for auser (step 1800). Assume that, for this example, the location update isreceived for the user 20-1. In response, the crowd analyzer 60 retrievesan old location of the user 20-1, if any (step 1802). The old locationis the current location of the user 20-1 prior to receiving the newlocation. The crowd analyzer 60 then creates a new bounding box of apredetermined size centered at the new location of the user 20-1 (step1804) and an old bounding box of a predetermined size centered at theold location of the user 20-1, if any (step 1806). The predeterminedsize of the new and old bounding boxes may be any desired size. As oneexample, the predetermined size of the new and old bounding boxes is 40meters by 40 meters. Note that if the user 20-1 does not have an oldlocation (i.e., the location received in step 1800 is the first locationreceived for the user 20-1), then the old bounding box is essentiallynull. Also note that while bounding “boxes” are used in this example,the bounding areas may be of any desired shape.

Next, the crowd analyzer 60 determines whether the new and old boundingboxes overlap (step 1808). If so, the crowd analyzer 60 creates abounding box encompassing the new and old bounding boxes (step 1810).For example, if the new and old bounding boxes are 40×40 meter regionsand a 1×1 meter square at the northeast corner of the new bounding boxoverlaps a 1×1 meter square at the southwest corner of the old boundingbox, the crowd analyzer 60 may create a 79×79 meter square bounding boxencompassing both the new and old bounding boxes.

The crowd analyzer 60 then determines the individual users and crowdsrelevant to the bounding box created in step 1810 (step 1812). Thecrowds relevant to the bounding box are crowds that are within oroverlap the bounding box (e.g., have at least one user located withinthe bounding box). The individual users relevant to the bounding box areusers that are currently located within the bounding box and not alreadypart of a crowd. Next, the crowd analyzer 60 computes an optimalinclusion distance for individual users based on user density within thebounding box (step 1814). More specifically, in one embodiment, theoptimal inclusion distance for individuals, which is also referred toherein as an initial optimal inclusion distance, is set according to thefollowing equation:

${{{initial\_ optimal}{\_ inclusion}{\_ dist}} = {a \cdot \sqrt{\frac{A_{BoundingBox}}{{number\_ of}{\_ users}}}}},$

where a is a number between 0 and 1, A_(BoundingBox) is an area of thebounding box, and number_of_users is the total number of users in thebounding box. The total number of users in the bounding box includesboth individual users that are not already in a crowd and users that arealready in a crowd. In one embodiment, a is ⅔.

The crowd analyzer 60 then creates a crowd for each individual userwithin the bounding box that is not already included in a crowd and setsthe optimal inclusion distance for the crowds to the initial optimalinclusion distance (step 1816). At this point, the process proceeds toFIG. 17B where the crowd analyzer 60 analyzes the crowds relevant to thebounding box to determine whether any of the crowd members (i.e., usersin the crowds) violate the optimal inclusion distance of their crowds(step 1818). Any crowd member that violates the optimal inclusiondistance of his or her crowd is then removed from that crowd (step1820). The crowd analyzer 60 then creates a crowd of one user for eachof the users removed from their crowds in step 1820 and sets the optimalinclusion distance for the newly created crowds to the initial optimalinclusion distance (step 1822).

Next, the crowd analyzer 60 determines the two closest crowds for thebounding box (step 1824) and a distance between the two closest crowds(step 1826). The distance between the two closest crowds is the distancebetween the crowd centers of the two closest crowds. The crowd analyzer60 then determines whether the distance between the two closest crowdsis less than the optimal inclusion distance of a larger of the twoclosest crowds (step 1828). If the two closest crowds are of the samesize (i.e., have the same number of users), then the optimal inclusiondistance of either of the two closest crowds may be used. Alternatively,if the two closest crowds are of the same size, the optimal inclusiondistances of both of the two closest crowds may be used such that thecrowd analyzer 60 determines whether the distance between the twoclosest crowds is less than the optimal inclusion distances of both ofthe two closest crowds. As another alternative, if the two closestcrowds are of the same size, the crowd analyzer 60 may compare thedistance between the two closest crowds to an average of the optimalinclusion distances of the two closest crowds.

If the distance between the two closest crowds is not less than theoptimal inclusion distance, the process proceeds to step 1838. If thedistance between the two closest crowds is less than the optimalinclusion distance, the two closest crowds are combined or merged (step1830), and a new crowd center for the resulting crowd is computed (step1832). Again, a center of mass algorithm may be used to compute thecrowd center of a crowd. In addition, a new optimal inclusion distancefor the resulting crowd is computed (step 1834). In one embodiment, thenew optimal inclusion distance for the resulting crowd is computed as:

${{average} = {\frac{1}{n + 1} \cdot \left( {{{initial\_ optimal}{\_ inclusion}{\_ dist}} + {\sum\limits_{i = 1}^{n}d_{i}}} \right)}},{{{optimal\_ inclusion}{\_ dist}} = {{average} + \sqrt{\left( {\frac{1}{n} \cdot {\sum\limits_{i = 1}^{n}\left( {d_{i} - {average}} \right)^{2}}} \right)}}},$

where n is the number of users in the crowd and d_(i) is a distancebetween the ith user and the crowd center. In other words, the newoptimal inclusion distance is computed as the average of the initialoptimal inclusion distance and the distances between the users in thecrowd and the crowd center plus one standard deviation.

At this point, the crowd analyzer 60 determines whether a maximum numberof iterations have been performed (step 1836). The maximum number ofiterations is a predefined number that ensures that the crowd formationprocess does not indefinitely loop over steps 1818 through 1834 or loopover steps 1818 through 1834 more than a desired maximum number oftimes. If the maximum number of iterations has not been reached, theprocess returns to step 1818 and is repeated until either the distancebetween the two closest crowds is not less than the optimal inclusiondistance of the larger crowd or the maximum number of iterations hasbeen reached. At that point, the crowd analyzer 60 discards crowds withless than three users, or members (step 1838) and the process ends.

Returning to step 1808 in FIG. 17A, if the new and old bounding boxes donot overlap, the process proceeds to FIG. 17C and the bounding box to beprocessed is set to the old bounding box (step 1840). In general, thecrowd analyzer 60 then processes the old bounding box in much the samemanner as described above with respect to steps 1812 through 1838. Morespecifically, the crowd analyzer 60 determines the individual users andcrowds relevant to the bounding box (step 1842). The crowds relevant tothe bounding box are crowds that are within or overlap the bounding box(e.g., have at least one user located within the bounding box). Theindividual users relevant to the bounding box are users that arecurrently located within the bounding box and not already part of acrowd. Next, the crowd analyzer 60 computes an optimal inclusiondistance for individual users based on user density within the boundingbox (step 1844). More specifically, in one embodiment, the optimalinclusion distance for individuals, which is also referred to herein asan initial optimal inclusion distance, is set according to the followingequation:

${{{initial\_ optimal}{\_ inclusion}{\_ dist}} = {a \cdot \sqrt{\frac{A_{BoundingBox}}{{number\_ of}{\_ users}}}}},$

where a is a number between 0 and 1, A_(BoundingBox) is an area of thebounding box, and number_of_users is the total number of users in thebounding box. The total number of users in the bounding box includesboth individual users that are not already in a crowd and users that arealready in a crowd. In one embodiment, a is ⅔.

The crowd analyzer 60 then creates a crowd of one user for eachindividual user within the bounding box that is not already included ina crowd and sets the optimal inclusion distance for the crowds to theinitial optimal inclusion distance (step 1846). At this point, the crowdanalyzer 60 analyzes the crowds for the bounding box to determinewhether any crowd members (i.e., users in the crowds) violate theoptimal inclusion distance of their crowds (step 1848). Any crowd memberthat violates the optimal inclusion distance of his or her crowd is thenremoved from that crowd (step 1850). The crowd analyzer 60 then createsa crowd of one user for each of the users removed from their crowds instep 1850 and sets the optimal inclusion distance for the newly createdcrowds to the initial optimal inclusion distance (step 1852).

Next, the crowd analyzer 60 determines the two closest crowds in thebounding box (step 1854) and a distance between the two closest crowds(step 1856). The distance between the two closest crowds is the distancebetween the crowd centers of the two closest crowds. The crowd analyzer60 then determines whether the distance between the two closest crowdsis less than the optimal inclusion distance of a larger of the twoclosest crowds (step 1858). If the two closest crowds are of the samesize (i.e., have the same number of users), then the optimal inclusiondistance of either of the two closest crowds may be used. Alternatively,if the two closest crowds are of the same size, the optimal inclusiondistances of both of the two closest crowds may be used such that thecrowd analyzer 60 determines whether the distance between the twoclosest crowds is less than the optimal inclusion distances of both ofthe two closest crowds. As another alternative, if the two closestcrowds are of the same size, the crowd analyzer 60 may compare thedistance between the two closest crowds to an average of the optimalinclusion distances of the two closest crowds.

If the distance between the two closest crowds is less than the optimalinclusion distance, the two closest crowds are combined or merged (step1860), and a new crowd center for the resulting crowd is computed (step1862). Again, a center of mass algorithm may be used to compute thecrowd center of a crowd. In addition, a new optimal inclusion distancefor the resulting crowd is computed (step 1864). As discussed above, inone embodiment, the new optimal inclusion distance for the resultingcrowd is computed as:

${{average} = {\frac{1}{n + 1} \cdot \left( {{{initial\_ optimal}{\_ inclusion}{\_ dist}} + {\sum\limits_{i = 1}^{n}d_{i}}} \right)}},{{{optimal\_ inclusion}{\_ dist}} = {{average} + \sqrt{\left( {\frac{1}{n} \cdot {\sum\limits_{i = 1}^{n}\left( {d_{i} - {average}} \right)^{2}}} \right)}}},$

where n is the number of users in the crowd and d_(i) is a distancebetween the ith user and the crowd center. In other words, the newoptimal inclusion distance is computed as the average of the initialoptimal inclusion distance and the distances between the users in thecrowd and the crowd center plus one standard deviation.

At this point, the crowd analyzer 60 determines whether a maximum numberof iterations have been performed (step 1866). If the maximum number ofiterations has not been reached, the process returns to step 1848 and isrepeated until either the distance between the two closest crowds is notless than the optimal inclusion distance of the larger crowd or themaximum number of iterations has been reached. At that point, the crowdanalyzer 60 discards crowds with less than three users, or members (step1868). The crowd analyzer 60 then determines whether the crowd formationprocess for the new and old bounding boxes is done (step 1870). In otherwords, the crowd analyzer 60 determines whether both the new and oldbounding boxes have been processed. If not, the bounding box is set tothe new bounding box (step 1872), and the process returns to step 1842and is repeated for the new bounding box. Once both the new and oldbounding box have been processed, the crowd formation process ends.

FIGS. 18A through 18D graphically illustrate the crowd formation processof FIGS. 17A through 17D for a scenario where the crowd formationprocess is triggered by a location update for a user having no oldlocation. In this scenario, the crowd analyzer 60 creates a new boundingbox 122 for the new location of the user, and the new bounding box 122is set as the bounding box to be processed for crowd formation. Then, asillustrated in FIG. 18A, the crowd analyzer 60 identifies all individualusers currently located within the bounding box 122 and all crowdslocated within or overlapping the bounding box. In this example, crowd124 is an existing crowd relevant to the bounding box 122. Crowds areindicated by dashed circles, crowd centers are indicated by cross-hairs(+), and users are indicated as dots. Next, as illustrated in FIG. 18B,the crowd analyzer 60 creates crowds 126 through 130 of one user for theindividual users, and the optional inclusion distances of the crowds 126through 130 are set to the initial optimal inclusion distance. Asdiscussed above, the initial optimal inclusion distance is computed bythe crowd analyzer 60 based on a density of users within the boundingbox 122.

The crowd analyzer 60 then identifies the two closest crowds 126 and 128in the bounding box 122 and determines a distance between the twoclosest crowds 126 and 128. In this example, the distance between thetwo closest crowds 126 and 128 is less than the optimal inclusiondistance. As such, the two closest crowds 126 and 128 are merged and anew crowd center and new optimal inclusion distance are computed, asillustrated in FIG. 18C. The crowd analyzer 60 then repeats the processsuch that the two closest crowds 126 and 130 in the bounding box 122 areagain merged, as illustrated in FIG. 18D. At this point, the distancebetween the two closest crowds 124 and 126 is greater than theappropriate optimal inclusion distance. As such, the crowd formationprocess is complete.

FIGS. 19A through 19F graphically illustrate the crowd formation processof FIGS. 17A through 17D for a scenario where the new and old boundingboxes overlap. As illustrated in FIG. 19A, a user moves from an oldlocation to a new location, as indicated by an arrow. The crowd analyzer60 receives a location update for the user giving the new location ofthe user. In response, the crowd analyzer 60 creates an old bounding box132 for the old location of the user and a new bounding box 134 for thenew location of the user. Crowd 136 exists in the old bounding box 132,and crowd 138 exists in the new bounding box 134.

Since the old bounding box 132 and the new bounding box 134 overlap, thecrowd analyzer 60 creates a bounding box 140 that encompasses both theold bounding box 132 and the new bounding box 134, as illustrated inFIG. 19B. In addition, the crowd analyzer 60 creates crowds 142 through148 for individual users currently located within the bounding box 140.The optimal inclusion distances of the crowds 142 through 148 are set tothe initial optimal inclusion distance computed by the crowd analyzer 60based on the density of users in the bounding box 140.

Next, the crowd analyzer 60 analyzes the crowds 136, 138, and 142through 148 to determine whether any members of the crowds 136, 138, and142 through 148 violate the optimal inclusion distances of the crowds136, 138, and 142 through 148. In this example, as a result of the userleaving the crowd 136 and moving to his new location, both of theremaining members of the crowd 136 violate the optimal inclusiondistance of the crowd 136. As such, the crowd analyzer 60 removes theremaining users from the crowd 136 and creates crowds 150 and 152 of oneuser each for those users, as illustrated in FIG. 19C.

The crowd analyzer 60 then identifies the two closest crowds in thebounding box 140, which in this example are the crowds 146 and 148.Next, the crowd analyzer 60 computes a distance between the two crowds146 and 148. In this example, the distance between the two crowds 146and 148 is less than the initial optimal inclusion distance and, assuch, the two crowds 146 and 148 are combined. In this example, crowdsare combined by merging the smaller crowd into the larger crowd. Sincethe two crowds 146 and 148 are of the same size, the crowd analyzer 60merges the crowd 148 into the crowd 146, as illustrated in FIG. 19D. Anew crowd center and new optimal inclusion distance are then computedfor the crowd 146.

At this point, the crowd analyzer 60 repeats the process and determinesthat the crowds 138 and 144 are now the two closest crowds. In thisexample, the distance between the two crowds 138 and 144 is less thanthe optimal inclusion distance of the larger of the two crowds 138 and144, which is the crowd 138. As such, the crowd 144 is merged into thecrowd 138 and a new crowd center and optimal inclusion distance arecomputed for the crowd 138, as illustrated in FIG. 19E. At this point,there are no two crowds closer than the optimal inclusion distance ofthe larger of the two crowds. As such, the crowd analyzer 60 discardsany crowds having less than three members, as illustrated in FIG. 19F.In this example, the crowds 142, 146, 150, and 152 have less than threemembers and are therefore removed. The crowd 138 has three or moremembers and, as such, is not removed. At this point, the crowd formationprocess is complete.

FIGS. 20A through 20E graphically illustrate the crowd formation processof FIGS. 17A through 17D in a scenario where the new and old boundingboxes do not overlap. As illustrated in FIG. 20A, in this example, theuser moves from an old location to a new location. The crowd analyzer 60creates an old bounding box 154 for the old location of the user and anew bounding box 156 for the new location of the user. Crowds 158 and160 exist in the old bounding box 154, and crowd 162 exists in the newbounding box 156. In this example, since the old and new bounding boxes154 and 156 do not overlap, the crowd analyzer 60 processes the old andnew bounding boxes 154 and 156 separately.

More specifically, as illustrated in FIG. 20B, as a result of themovement of the user from the old location to the new location, theremaining users in the crowd 158 no longer satisfy the optimal inclusiondistance for the crowd 158. As such, the remaining users in the crowd158 are removed from the crowd 158, and crowds 164 and 166 of one usereach are created for the removed users as shown in FIG. 20C. In thisexample, no two crowds in the old bounding box 154 are close enough tobe combined. As such, processing of the old bounding box 154 iscomplete, and the crowd analyzer 60 proceeds to process the new boundingbox 156.

As illustrated in FIG. 20D, processing of the new bounding box 156begins by the crowd analyzer 60 creating a crowd 168 of one user for theuser. The crowd analyzer 60 then identifies the crowds 162 and 168 asthe two closest crowds in the new bounding box 156 and determines adistance between the two crowds 162 and 168. In this example, thedistance between the two crowds 162 and 168 is less than the optimalinclusion distance of the larger crowd, which is the crowd 162. As such,the crowd analyzer 60 combines the crowds 162 and 168 by merging thecrowd 168 into the crowd 162, as illustrated in FIG. 20E. A new crowdcenter and new optimal inclusion distance are then computed for thecrowd 162. At this point, the crowd formation process is complete.

Before proceeding, a variation of the spatial formation processdiscussed above with respect to FIGS. 17A through 17D, 18A through 18D,19A through 19F, and 20A through 20E will be described. In thisalternative embodiment, a location accuracy of the location update fromthe user received in step 1800 is considered. More specifically, in step1800, the location update received by the MAP server 12 includes theupdated location of the user 20-1 as well as a location accuracy for thelocation of the user 20-1, which may be expressed as, for example, aradius in meters from the location of the user 20-1. In the embodimentwhere the location of the user 20-1 is obtained from a GPS receiver ofthe mobile device 18-1, the location accuracy of the location of theuser 20-1 may be provided by the GPS receiver or derived from data fromthe GPS receiver as will be appreciated by one having ordinary skill inthe art.

Then, in steps 1802 and 1804, sizes of the new and old bounding boxescentered at the new and old locations of the user 20-1 are set as afunction of the location accuracy of the new and old locations of theuser 20-1. If the new location of the user 20-1 is inaccurate, then thenew bounding box will be large. If the new location of the user 20-1 isaccurate, then the new bounding box will be small. For example, thelength and width of the new bounding box may be set to M times thelocation accuracy of the new location of the user 20-1, where thelocation accuracy is expressed as a radius in meters from the newlocation of the user 20-1. The number M may be any desired number. Forexample, the number M may be 5. In a similar manner, the locationaccuracy of the old location of the user 20-1 may be used to set thelength and width of the old bounding box.

In addition, the location accuracy may be considered when computing theinitial optimal inclusion distances used for crowds of one user in steps1814 and 1844. As discussed above, the initial optimal inclusiondistance is computed based on the following equation:

${{{initial\_ optimal}{\_ inclusion}{\_ dist}} = {a \cdot \sqrt{\frac{A_{BoundingBox}}{{number\_ of}{\_ users}}}}},$

where a is a number between 0 and 1, A_(BoundingBox) is an area of thebounding box, and number_of_users is the total number of users in thebounding box. The total number of users in the bounding box includesboth individual users that are not already in a crowd and users that arealready in a crowd. In one embodiment, a is ⅔. However, if the computedinitial optimal inclusion distance is less than the location accuracy ofthe current location of the individual user in a crowd, then thelocation accuracy, rather than the computed value, is used for theinitial optimal inclusion distance for that crowd. As such, as locationaccuracy decreases, crowds become larger and more inclusive. Incontrast, as location accuracy increases, crowds become smaller and lessinclusive. In other words, the granularity with which crowds are formedis a function of the location accuracy.

Likewise, when new optimal inclusion distances for crowds are recomputedin steps 1834 and 1864, location accuracy may also be considered. Asdiscussed above, the new optimal inclusion distance may first becomputed based on the following equation:

${{average} = {\frac{1}{n + 1} \cdot \left( {{{initial\_ optimal}{\_ inclusion}{\_ dist}} + {\sum\limits_{i = 1}^{n}d_{i}}} \right)}},{{{optimial\_ inclusion}{\_ dist}} = {{average} + \sqrt{\left( {\frac{1}{n} \cdot {\sum\limits_{i = 1}^{n}\left( {d_{i} - {average}} \right)^{2}}} \right)}}},$

where n is the number of users in the crowd and d_(i) is a distancebetween the ith user and the crowd center. In other words, the newoptimal inclusion distance is computed as the average of the initialoptimal inclusion distance and the distances between the users in thecrowd and the crowd center plus one standard deviation. However, if thecomputed value for the new optimal inclusion distance is less than anaverage location accuracy of the users in the crowd, the averagelocation accuracy of the users in the crowd, rather than the computedvalue, is used as the new optimal inclusion distance.

FIG. 21 illustrates the operation of the system 10 of FIGS. 1A and 1B toenable the mobile devices 18-1 through 18-N to request crowd data forcurrently formed crowds according to one embodiment of the presentdisclosure. Note that while in this example the request is initiated bythe MAP application 32-1 of the mobile device 18-1, this discussion isequally applicable to the MAP applications 32-2 through 32-N of theother mobile devices 18-2 through 18-N. In addition, in a similarmanner, requests may be received from the third-party applications 34-1through 34-N. Still further, the MAP server 12 may process crowdrequests from other devices such as the subscriber device 22, thethird-party server 26, and/or the profile server 14.

First, the MAP application 32-1 sends a crowd request to the MAP client30-1 (step 1900). The crowd request is a request for crowd data forcrowds currently formed near a specified POI or within a specified AOI.The crowd request may be initiated by the user 20-1 of the mobile device18-1 via the MAP application 32-1 or may be initiated automatically bythe MAP application 32-1 in response to an event such as, for example,start-up of the MAP application 32-1, movement of the user 20-1, or thelike. In one embodiment, the crowd request is for a POI, where the POIis a POI corresponding to the current location of the user 20-1, a POIselected from a list of POIs defined by the user 20-1, a POI selectedfrom a list of POIs defined by the MAP application 32-1 or the MAPserver 12, a POI selected by the user 20-1 from a map, a POI implicitlydefined via a separate application (e.g., POI is implicitly defined asthe location of the nearest Starbucks coffee house in response to theuser 20-1 performing a Google search for “Starbucks”), or the like. Ifthe POI is selected from a list of POIs, the list of POIs may includestatic POIs which may be defined by street addresses or latitude andlongitude coordinates, dynamic POIs which may be defined as the currentlocations of one or more friends of the user 20-1, or both. Note that insome embodiments, the user 20-1 may be enabled to define a POI byselecting a crowd center of a crowd as a POI, where the POI wouldthereafter remain static at that point and would not follow the crowd.

In another embodiment, the crowd request is for an AOI, where the AOImay be an AOI of a predefined shape and size centered at the currentlocation of the user 20-1, an AOI selected from a list of AOIs definedby the user 20-1, an AOI selected from a list of AOIs defined by the MAPapplication 32-1 or the MAP server 12, an AOI selected by the user 20-1from a map, an AOI implicitly defined via a separate application (e.g.,AOI is implicitly defined as an area of a predefined shape and sizecentered at the location of the nearest Starbucks coffee house inresponse to the user 20-1 performing a Google search for “Starbucks”),or the like. If the AOI is selected from a list of AOIs, the list ofAOIs may include static AOIs, dynamic AOIs which may be defined as areasof a predefined shape and size centered at the current locations of oneor more friends of the user 20-1, or both. Note that in someembodiments, the user 20-1 may be enabled to define an AOI by selectinga crowd such that an AOI is created of a predefined shape and sizecentered at the crowd center of the selected crowd. The AOI wouldthereafter remain static and would not follow the crowd. The POI or theAOI of the crowd request may be selected by the user 20-1 via the MAPapplication 32-1. In yet another embodiment, the MAP application 32-1automatically uses the current location of the user 20-1 as the POI oras a center point for an AOI of a predefined shape and size.

Upon receiving the crowd request, the MAP client 30-1 forwards the crowdrequest to the MAP server 12 (step 1902). Note that in some embodiments,the MAP client 30-1 may process the crowd request before forwarding thecrowd request to the MAP server 12. For example, in some embodiments,the crowd request may include more than one POI or more than one AOI. Assuch, the MAP client 30-1 may generate a separate crowd request for eachPOI or each AOI.

In response to receiving the crowd request from the MAP client 30-1, theMAP server 12 identifies one or more crowds relevant to the crowdrequest (step 1904). More specifically, in one embodiment, the crowdanalyzer 60 performs a crowd formation process such as that describedabove in FIG. 15 to form one or more crowds relevant to the POI or theAOI of the crowd request. In another embodiment, the crowd analyzer 60proactively forms crowds using a process such as that described above inFIGS. 17A through 17D and stores corresponding crowd records in thedatastore 66 of the MAP server 12. Then, rather than forming therelevant crowds in response to the crowd request, the crowd analyzer 60queries the datastore 66 to identify the crowds that are relevant to thecrowd request. The crowds relevant to the crowd request may be thosecrowds within or intersecting a bounding region, such as a bounding box,for the crowd request. If the crowd request is for a POI, the boundingregion is a geographic region of a predefined shape and size centered atthe POI. If the crowd request is for an AOI, the bounding region is theAOI.

Once the crowd analyzer 60 has identified the crowds relevant to thecrowd request, the MAP server 12 generates crowd data for the identifiedcrowds (step 1906). As discussed below in detail, the crowd data for theidentified crowds may include aggregate profiles for the crowds,information characterizing the crowds, or both. In addition, the crowddata may include spatial information defining the locations of thecrowds, the number of users in the crowds, the amount of time the crowdshave been located at or near the POI or within the AOI of the crowdrequest, or the like. The MAP server 12 then returns the crowd data tothe MAP client 30-1 (step 1908).

Upon receiving the crowd data, the MAP client 30-1 forwards the crowddata to the MAP application 32-1 (step 1910). Note that in someembodiments the MAP client 30-1 may process the crowd data beforesending the crowd data to the MAP application 32-1. The MAP application32-1 then presents the crowd data to the user 20-1 (step 1912). Themanner in which the crowd data is presented depends on the particularimplementation of the MAP application 32-1. In one embodiment, the crowddata is overlaid upon a map. For example, the crowds may be representedby corresponding indicators overlaid on a map. The user 20-1 may thenselect a crowd in order to view additional crowd data regarding thatcrowd such as, for example, the aggregate profile of that crowd,characteristics of that crowd, or the like.

Note that in one embodiment, the MAP application 32-1 may operate toroll-up the aggregate profiles for multiple crowds into a rolled-upaggregate profile for those crowds. The rolled-up aggregate profile maybe the average of the aggregate profiles of the crowds. For example, theMAP application 32-1 may roll-up the aggregate profiles for multiplecrowds at a POI and present the rolled-up aggregate profile for themultiple crowds at the POI to the user 20-1. In a similar manner, theMAP application 32-1 may provide a rolled-up aggregate profile for anAOI. In another embodiment, the MAP server 12 may roll-up crowds for aPOI or an AOI and provide the rolled-up aggregate profile in addition toor as an alternative to the aggregate profiles for the individualcrowds.

FIGS. 22 through 31 describe the operation of the profile augmentationfunction 40 of FIGS. 1A and 1B according to several differentembodiments of the present disclosure. More specifically, FIG. 22illustrates the operation of the profile augmentation function 40 toaugment a user profile of a subject user based on aggregate profile datafor a crowd of users located at or near a current location of thesubject user according to one embodiment of the present disclosure.First, the profile augmentation function 40 gets, or obtains, a currentlocation of a subject user (step 2000). Depending on the particularembodiment, the subject user may be a system-user, which is one of theusers 20-1 through 20-N of the mobile devices 18-1 through 18-N or thesubscriber 24 of the subscriber device 22, or a third-party user, whichmay be a user associated with the profile server 14 or the third-partyserver 26 that is not one of the system-users. The current location ofthe subject user may be obtained using any suitable technique. Forexample, if the subject user is user 20-1, the current location of theuser 20-1 is preferably obtained from the mobile device 18-1 or thelocation server 16. As another example, if the subject user is athird-party user, the current location of the third-party user may beobtained from a location-aware device of the third-party user.

Next, the profile augmentation function 40 obtains an aggregate profilefor a crowd of users currently located at or near the current locationof the subject user (step 2002). Crowds of users currently located at ornear the current location of the subject user are referred to herein ascrowds that are currently located at locations that are relevant to thecurrent location of the subject user. More specifically, depending onthe particular implementation, the crowd currently located at or nearthe current location of the subject user is a crowd in which the subjectuser is included, a crowd closest to the current location of the subjectuser, or a crowd that is within a geographic region of a predefinedshape and size encompassing (e.g., centered at) the current location ofthe subject user. The aggregate profile of the crowd is preferablygenerated by comparing the user profiles of the users in the crowd toone another, and the aggregate profile of the crowd preferably includesa number of keywords and, for each keyword, a number of user matches, oroccurrences, for that keyword in the user profiles of the users in thecrowd. The profile augmentation function 40 then augments a user profileof the subject user based on the aggregate profile of the crowd (step2004).

FIG. 23 illustrates step 2004 of FIG. 22 in more detail according to oneembodiment of the present disclosure. In this embodiment, the userprofile of the subject user includes a number of keywords and aprobability assigned to each of the keywords. The probability assignedto a keyword in the user profile of the subject user is a probabilitythat the subject user has an interest in the keyword. Initially, theuser profile of the subject user includes zero or more keywords enteredby the subject user, where each of these keywords is assigned a fixedprobability of 100%. Over time, as a number of iterations of the profileaugmentation process of FIG. 22 are performed, additional keywords areadded to the user profile of the subject user and probabilities areassigned to those keywords. As discussed below, the probabilities ofthese additional keywords are determined based on questions asked of thesubject user and/or the number of user matches, or occurrences, for thekeywords from one or more aggregate profiles of crowds located at ornear the subject user.

More specifically, in order to augment the user profile of the subjectuser based on the aggregate profile of the crowd at or near the currentlocation of the subject user, the profile augmentation function 40identifies, or selects, a predetermined number (N_(MAX)) of keywordsfrom the aggregate profile of the crowd having the highest number ofuser matches and not having a fixed probability in the user profile ofthe subject user (step 2100). Keywords in the user profile of thesubject user having fixed probabilities are keywords that have beenentered by the subject user into the user profile. In addition, asdiscussed below, the keywords having fixed probabilities may alsoinclude keywords in which the subject user has expressed an interest ordisinterest in response to questions from the profile augmentationfunction 40.

For example, assume that the user profile of the subject user is:

Keyword Probability (%) Tennis 100 (fixed) Politics 100 (fixed)Also, assume that the aggregate profile for the crowd is:

Keyword User Matches Tennis 5 Sports 3 China 2 Coffee 2 Photography 1As such, the profile augmentation function 40 selects, at most, thepredetermined number (N_(MAX)) of the keywords from the aggregateprofile having the highest number of user matches and not having a fixedprobability in the user profile of the subject user. In this example,assume that N_(MAX) is three (3). Here, the three keywords having thehighest number of user matches and not having fixed probabilities in theuser profile of the subject user are the keywords Sports, China, andCoffee. Note that the keyword Tennis has a fixed probability in the userprofile of the subject user and as such is not selected by the profileaugmentation function 40.

Next, the profile augmentation function 40 generates a question for eachof the keywords identified in step 2100 (step 2102). In general, thequestions are automatically generated in order to determine whether thesubject user is interested in the identified keywords. Returning to ourexample, if the identified keywords are Sports, China, and Coffee, theprofile augmentation function 40 may generate the following questions:“Do you have an interest in sports?,” “Do you have an interest inChina?,” and “Do you like coffee?.” Alternatively, the questions for theidentified keywords may be a list of the identified keywords where thesubject user will be enabled to select “Yes” or “No” for each of theidentified keywords, or the like. The profile augmentation function 40then provides the questions for the identified keywords to the subjectuser (step 2104), and receives answers to the questions from the subjectuser (2106). Note that the subject user may choose to answer all, some,or none of the questions. Lastly, the profile augmentation function 40updates the user profile of the subject user based on any answersreceived from the subject user and, in this embodiment, the number ofuser matches for the keywords in the aggregate profile of the crowd(step 2108).

FIG. 24 illustrates step 2108 of FIG. 23 in more detail according to oneembodiment of the present disclosure. Specifically, FIG. 24 illustratesthe operation of the profile augmentation function 40 to update the userprofile of the subject user based on any answers received from thesubject user and the number of user matches for the keywords in theaggregate profile of the crowd. First, the profile augmentation function40 gets the next keyword from the aggregate profile (step 2200). Notethat for the first iteration, the next keyword is the first keyword inthe aggregate profile. Next, the profile augmentation function 40determines whether a question was asked for the keyword and whether ananswer to the question was received from the subject user (step 2202).If not, the profile augmentation function 40 determines whether thekeyword is already in the user profile of the subject user (step 2204).The keyword may already be in the user profile if the subject userentered the keyword into the user profile or if the keyword was added tothe user profile of the subject user during a previous iteration of theprofile augmentation process. If the keyword is not already in the userprofile of the subject user, the profile augmentation function 40computes a probability for the keyword based on the number of usermatches for the keyword in the aggregate profile (step 2206). In oneembodiment, the probability score is computed based on the followingequation:

${{PROBABILITY} = {\frac{USER\_ MATCHES}{{TOTAL\_ USER}{\_ MATCHES}} \times 100}},$

where PROBABILITY is the probability of the keyword, USER_MATCHES is thenumber of user matches for the keyword from the aggregate profile, andTOTAL_USER_MATCHES is the sum of the number of user matches for all ofthe keywords in the aggregate profile. Note that the equation above isexemplary and is not intended to limit the scope of the presentdisclosure. The profile augmentation function 40 then adds the keywordand the probability computed for the keyword to the user profile of thesubject user (step 2208). At this point, the process proceeds to step2222, which is described below.

Returning to step 2204, if the keyword is already in the user profile ofthe subject user, the profile augmentation function 40 determineswhether the keyword has a fixed probability in the user profile of thesubject user (step 2210).

In this embodiment, the keyword will have a fixed probability if thesubject user added the keyword to the user profile or if the subjectuser previously answered a question for the keyword. More specifically,in this embodiment, the keyword will have a fixed probability of 100% ifthe subject user previously added the keyword to the user profile, afixed probability of 100% if the subject user answered a question forthe keyword in a previous iteration of the profile augmentation processin a manner that indicated that the subject user has an interest in thekeyword, or a fixed probability of 0% if the subject user answered aquestion for the keyword in a previous iteration of the profileaugmentation process in a manner that indicated that the subject userdoes not have an interest in the keyword. If the keyword does not have afixed probability, the profile augmentation function 40 computes a newprobability for the keyword based on the probability for the keyword inthe user profile (i.e., the old probability for the keyword) and thenumber of user matches for the keyword in the aggregate profile (step2212). In one embodiment, the new probability is computed based on thefollowing equation:

PROBABILITY_(NEW)=AVG(PROBABILITY_(OLD),PROBABILITY_(TEMP)),

where

${{PROBABILITY}_{TEMP} = {\frac{USER\_ MATCHES}{{TOTAL\_ USER}{\_ MATCHES}} \times 100}},$

and PROBABILITY_(NEW) is the new probability for the keyword,PROBABILITY_(OLD) is the old probability for the keyword,PROBABILITY_(TEMP) is a temporary probability used for purposes of thisexemplary calculation, USER_MATCHES is the number of user matches forthe keyword from the aggregate profile, and TOTAL_USER_MATCHES is thesum of the number of user matches for all of the keywords in theaggregate profile. The function AVG(x,y) is the average of the values xand y. Note that other techniques may be used to combine the oldprobability and the temporary probability to provide the new probability(e.g., summing, weighted averaging, or the like). The profileaugmentation function 40 then updates the user profile of the subjectuser to include the new probability for the keyword (step 2214). At thispoint, the process proceeds to step 2222, which is described below.

Returning to step 2202, if a question was asked for the keyword and ananswer was received from the subject user for the question asked for thekeyword, the profile augmentation function 40 determines whether thekeyword is already in the user profile of the subject user (step 2216).If not, the profile augmentation function 40 adds the keyword to theuser profile of the subject user along with a fixed probability for thekeyword that reflects the answer given by the subject user to thecorresponding question (step 2218). In this example, the fixedprobability for the keyword is 100% if the subject user gave a positiveanswer indicating that the subject user has an interest in the keyword.In contrast, the fixed probability for the keyword is 0% if the subjectuser gave a negative answer indicating that the subject user does nothave an interest in the keyword. At this point, the process proceeds tostep 2222, which is described below.

Returning to step 2216, if the keyword is already in the user profile ofthe subject user, then the profile augmentation function 40 updates theuser profile of the subject user with a fixed probability for thekeyword that reflects the answer given by the subject user to thecorresponding question (step 2220). Again, in this example, the fixedprobability for the keyword is 100% if the subject user gave a positiveanswer indicating that the subject user has an interest in the keyword.In contrast, the fixed probability for the keyword is 0% if the subjectuser gave a negative answer indicating that the subject user does nothave an interest in the keyword. The process then proceeds to step 2222,which is described below.

At this point, whether proceeding from step 2208, step 2210, step 2214,step 2218, or step 2220, the profile augmentation function 40 determineswhether that last keyword in the aggregate profile has been processed(step 2222). If not, the process returns to step 2200 and is repeatedfor the next keyword in the aggregate profile. Once all of the keywordsin the aggregate profile have been processed, the process is complete.

Again, as an example, assume that the user profile of the subject useris:

Keyword Probability (%) Tennis 100 (fixed) Politics 100 (fixed)Also, assume that the aggregate profile is:

Keyword User Matches Tennis 5 Sports 3 China 2 Coffee 2 Photography 1and that questions were asked for the keywords Sports, China, and Coffeefrom the aggregate profile. Further assume, that the subject useranswered the question for Sports in a manner that indicated that thesubject user has an interest in sports, answered the question for Coffeein a manner that indicated that the subject user is not interested inCoffee, and did not answer the question for China. As such, using theprocess described above, the user profile of the subject user is updatedas follows:

Keyword Probability Tennis 100 (fixed) Politics 100 (fixed) Sports 100(fixed) China 15 Photography  8 Coffee  0 (fixed)Note that future iterations of the profile augmentation process may beperformed in order to further augment the user profile of the subjectuser.

For instance, if the subject user thereafter moves to a new location andthe process is repeated, an aggregate profile for a new crowd that is ator near the new location of the subject user may be:

Keyword User Matches Sports 5 Photography 3 Hiking 2 Technology 2Farming 1In this example, assuming again that N_(MAX) is 3, then Photography,Hiking, and Technology are selected and corresponding questions areprovided to the subject user. For this example, assume that the subjectuser does not respond to any of the questions. As such, since thekeyword Photography is already in the user profile of the subject user,a new probability is computed for the keyword Photography based on theold probability which in this case is 8 and the number of user matchesfor the keyword Photography in the aggregate profile for the new crowd.The keywords Hiking and Technology are not already in the user profileof the subject user. As such, the keywords Hiking and Technology areadded to the user profile of the subject user along with correspondingprobabilities computed based on the number of user matches for thosekeywords in the aggregate profile of the new crowd. As such, the updateduser profile of the subject user may then be:

Keyword Probability Tennis 100 (fixed) Politics 100 (fixed) Sports 100(fixed) China 15 Photography 15 Hiking 15 Technology 15 Farming  8Coffee  0 (fixed)

FIG. 25 illustrates step 2004 of FIG. 22 in more detail according toanother embodiment of the present disclosure. In this embodiment, theuser profile of the subject user includes a number of keywords and aprobability assigned to each of the keywords. Initially, the userprofile of the subject user includes zero or more keywords entered bythe subject user, where each of these keywords is assigned a fixedprobability of 100%. Over time, as a number of iterations of the profileaugmentation process of FIG. 22 are performed, additional keywords areadded to the user profile of the subject user. As discussed below, theprobabilities of these additional keywords are determined based onquestions asked of the subject user and/or the number of user matchesfor the keywords for aggregate profiles of crowds located at or near thesubject user.

More specifically, in order to augment the user profile of the subjectuser based on the aggregate profile of the crowd at or near the currentlocation of the subject user, the profile augmentation function 40 firstprovides a preliminary question to the subject user (step 2300). Thepreliminary question is preferably an open-ended question regarding theinterests of the subject user. For example, the preliminary question maybe “What is one of your current topics of interest?.” The profileaugmentation function 40 then receives an answer from the subject user(step 2302). The answer from the subject user is referred to herein as atopic of interest. The profile augmentation function 40 then selects adesired number of keywords from the aggregate profile that have thehighest number of user matches, do not have fixed probabilities in theuser profile of the subject user, and have the highest affinity to thetopic of interest provided by the subject user (step 2304). Affinitybetween the topic of interest and the keywords in the aggregate profilemay be determined using any suitable technique for determining theaffinity between two keywords. For example, an ontology or similar datastructure that defines relationships between words and topics may beused to determine the degree of relationship between two keywords (e.g.,degrees of separation of the two keywords in the ontology), where thedegree of relationship is utilized as the affinity of the two keywords.

For example, assume that the user profile of the subject user is:

Keyword Probability (%) Tennis 100 (fixed) Politics 100 (fixed)Also, assume that the aggregate profile is:

Keyword User Matches Tennis 5 Sports 3 China 2 Coffee 2 Europe 2Photography 1Further assume that topic of interest provided by the subject user isHistory and that the desired number of keywords to be selected is three(3). As such, the profile augmentation function 40 selects the Sportskeyword because it has the highest number of user matches and is notalready included in the user profile of the subject user with a fixedprobability. The profile augmentation function 40 then selects two morekeywords from the keywords China, Coffee, and Europe based on theaffinities of those keywords to the topic of interest, which is History.As such, in this example, the profile augmentation function 40 selectsthe keywords China and Europe because they have higher affinities withthe topic of interest than the keyword Coffee.

Next, the profile augmentation function 40 generates a question for eachof the selected keywords (step 2306). In general, the questions areautomatically generated in order to determine whether the subject useris interested in the identified keywords. Returning to our example, ifthe identified keywords are Sports, China, and Europe, the profileaugmentation function 40 may generate the following questions: “Do youhave an interest in sports?,” “Do you have an interest in China?,” and“Do you have an interest in Europe?.” Alternatively, the questions forthe identified keywords may be a list of the identified keywords wherethe subject user will be enabled to select “Yes” or “No” for each of theidentified keywords, or the like. The profile augmentation function 40then provides the questions for the identified keywords to the subjectuser (step 2308), and receives answers to the questions from the subjectuser (2310). Note that the subject user may choose to answer all, some,or none of the questions. Lastly, the profile augmentation function 40updates the user profile of the subject user based on any answersreceived from the subject user and, in this embodiment, the number ofuser matches for the keywords in the aggregate profile of the crowd(step 2312). More specifically, in one embodiment, the profileaugmentation function 40 updates the user profile of the subject userusing the process of FIG. 24 described above.

FIG. 26 illustrates the operation of the profile augmentation function40 to augment a user profile of a user based on an aggregate profile ofa crowd for the embodiment of FIG. 1A wherein the profile augmentationfunction 40 is implemented on the MAP server 12. First, the MAP server12 obtains a user profile of a system user (step 2400). The system useris one of the users 20-1 through 20-N. As discussed above, the MAPserver 12 may obtain the user profile of the system user from theprofile server 14, but is not limited thereto. Next, the MAP server 12obtains the current location of the system user in the manner describedabove and identifies a crowd at or near the current location of thesystem user (steps 2402 and 2404). The MAP server 12 may identify thecrowd by reactively performing the crowd formation process of FIG. 15for a geographic region encompassing the current location of the systemuser. Alternatively, the MAP server 12 may proactively form crowds usingthe process of FIG. 15 or FIGS. 17A through 17D. In this case, the MAPserver 12 identifies the crowd at or near the current location of thesystem user by querying the datastore 66 of the MAP server 12. Forexample, the crowd at or near the current location of the system usermay be a crowd in which the system user is currently included or a crowdthat is closest to the current location of the system user.

Next, the MAP server 12 obtains an aggregate profile for the crowd (step2406). More specifically, the MAP server 12 compares the user profilesof the users in the crowd to one another to generate the aggregateprofile of the crowd. As discussed above, in this embodiment, theaggregate profile of the crowd preferably includes a number of keywordsand, for each keyword, a number of user matches for the keyword in theuser profiles of the users in the crowd. The profile augmentationfunction 40, which for this embodiment is implemented on the MAP server12, then augments the user profile of the system user based on theaggregate profile of the crowd in the manner described above (step2408). Preferably, the process returns to step 2402 and is periodicallyor otherwise repeated to further augment the user profile of the systemuser over time.

FIG. 27 illustrates the operation of the profile augmentation function40 for the embodiment of FIG. 1B. In this embodiment, the profileaugmentation function 40 is implemented on the profile server 14, one ofthe mobile devices 18-1 through 18-N, the subscriber device 22, or thethird-party server 26. First, the profile augmentation function 40 sendsan aggregate profile request to the MAP server 12 that includes thecurrent location of the subject user (step 2500). Alternatively, if thesubject user is a system user (i.e., one of the users 20-1 through20-N), the aggregate profile request may identify the subject user,where the MAP server 12 then obtains the current location of the subjectuser. In this embodiment, the subject user may be a system user or athird-party user depending on the particular implementation. Inresponse, the MAP server 12 identifies a crowd that is at or near thecurrent location of the subject user (step 2502). Again, the crowd maybe formed proactively or reactively, as described above. The crowd thatis at or near the current location of the subject user is preferably acrowd that is at or closest to the current location of the subject user.If the subject user is a system user, the crowd that is at or near thecurrent location of the subject user may be a crowd in which the subjectuser is included. The MAP server 12 then obtains an aggregate profilefor the crowd (step 2504). More specifically, the MAP server 12 comparesthe user profiles of the users in the crowd to one another to generatethe aggregate profile of the crowd. As discussed above, in thisembodiment, the aggregate profile of the crowd preferably includes anumber of keywords and, for each keyword, a number of user matches forthe keyword in the user profiles of the users in the crowd. Next, theMAP server returns the aggregate profile of the crowd to the profileaugmentation function 40 (step 2506). The profile augmentation function40 then augments the user profile of the subject user based on theaggregate profile of the crowd in the manner described above (step2508).

FIGS. 28 through 32 illustrate the operation of the profile augmentationfunction 40 according to another embodiment of the present disclosure.In this embodiment, the profile augmentation function 40 augments a userprofile of a subject user based on a historical aggregate profile forusers historically located at locations relevant to the current locationof the subject user. The locations relevant to the current location ofthe subject user are locations that are at or near the current locationof the subject user. Note that while described separately herein, theprofile augmentation function 40 may augment the user profile of asubject user based on both an aggregate profile of a crowd at or nearthe current location of the subject user and a historical aggregateprofile for users historically located at or near the current locationof the subject user.

FIG. 28 illustrates the operation of the profile augmentation function40 to augment a user profile of a subject user based on a historicalaggregate profile data for users historically, or previously, located ator near a current location of the subject user according to anotherembodiment of the present disclosure. First, the profile augmentationfunction 40 gets, or obtains, a current location of a subject user (step2600). Depending on the particular embodiment, the subject user may be asystem-user, which is one of the users 20-1 through 20-N of the mobiledevices 18-1 through 18-N or the subscriber 24 of the subscriber device22, or a third-party user, which may be a user associated with theprofile server 14 or the third-party server 26 that is not one of thesystem-users. The current location of the subject user may be obtainedusing any suitable technique. For example, if the subject user is user20-1, the current location of the user 20-1 is preferably obtained fromthe mobile device 18-1 or the location server 16. As another example, ifthe subject user is a third-party user, the current location of thethird-party user may be obtained from a location-aware device of thethird-party user.

Next, the profile augmentation function 40 obtains a historicalaggregate profile for users historically located at or near the currentlocation of the subject user (step 2602). In one embodiment, the usershistorically located at or near the current location of the subject userare users that were located at or near the current location of thesubject user within one or more defined time windows. Each time windowmay be a relative time window that is relative to the current time(e.g., past 6 months, past 2 years, or the like) or an absolute timewindow (e.g., Friday, Feb. 12, 2010 or the like). In general, the usershistorically located at or near the current location of the subject userare users that were historically located within a defined geographicregion encompassing (e.g., centered at) the current location of thesubject user. In the preferred embodiment, the historical aggregateprofile includes a number of keywords and, for each keyword, a number ofuser matches, or occurrences, of the keyword in the user profiles of theusers historically located at or near the current location of thesubject user. The profile augmentation function 40 then augments a userprofile of the subject user based on the historical aggregate profile(step 2604).

FIG. 29 illustrates step 2604 of FIG. 28 in more detail according to oneembodiment of the present disclosure. In this embodiment, the userprofile of the subject user includes a number of keywords and aprobability assigned to each of the keywords. Initially, the userprofile of the subject user includes zero or more keywords entered bythe subject user, where each of these keywords is assigned a fixedprobability of 100%. Over time, as a number of iterations of the profileaugmentation process of FIG. 28 are performed, additional keywords areadded to the user profile of the subject user. As discussed below, theprobabilities of these additional keywords are determined based onquestions asked of the subject user and/or the number of user matchesfor the keywords from a historical aggregate profile obtained for thecurrent location of the subject user.

More specifically, in order to augment the user profile of the subjectuser based on the historical aggregate profile for the current locationof the subject user, the profile augmentation function 40 identifies, orselects, a predetermined number (N_(MAX)) of keywords from thehistorical aggregate profile having the highest number of user matchesand not having a fixed probability in the user profile of the subjectuser (step 2700). Keywords in the user profile of the subject userhaving fixed probabilities are keywords that have been entered by thesubject user into the user profile. In addition, as discussed below, thekeywords having fixed probabilities may also include keywords in whichthe subject user has expressed an interest or disinterest in response toquestions from the profile augmentation function 40.

For example, assume that the user profile of the subject user is:

Keyword Probability (%) Tennis 100 (fixed) Politics 100 (fixed)Also, assume that the historical aggregate profile is:

Keyword User Matches Tennis 19 Books 8 Photography 7 Fishing 4 Sports 3China 3 Coffee 2 Skiing 2 Europe 1 Farm Animals 1As such, the profile augmentation function 40 selects, at most, thepredetermined number (N_(MAX)) of the keywords from the historicalaggregate profile having the highest number of user matches and nothaving a fixed probability in the user profile of the subject user. Inthis example, assume that N_(MAX) is three (3). Here, the three keywordshaving the highest number of user matches and not having fixedprobabilities in the user profile of the subject user are the keywordsBooks, Photography, and Fishing. Note that the keyword Tennis has afixed probability in the user profile of the subject user.

Next, the profile augmentation function 40 generates a question for eachof the identified keywords (step 2702). In general, the questions areautomatically generated in order to determine whether the subject useris interested in the identified keywords. Returning to our example, ifthe identified keywords are Books, Photography, and Fishing, the profileaugmentation function 40 may generate the following questions: “Do youhave an interest in books?,” “Do you have an interest in photography?,”and “Do you like fishing?.” Alternatively, the questions for theidentified keywords may be a list of the identified keywords where thesubject user will be enabled to select “Yes” or “No” for each of theidentified keywords, or the like. The profile augmentation function 40then provides the questions for the identified keywords to the subjectuser (step 2704), and receives answers to the questions from the subjectuser (2706). Note that the subject user may choose to answer all, some,or none of the questions. Lastly, the profile augmentation function 40updates the user profile of the subject user based on any answersreceived from the subject user and, in this embodiment, the number ofuser matches for the keywords in the historical aggregate profile (step2708). In one embodiment, the profile augmentation function 40 updatesthe user profile of the subject user using the process of FIG. 24described above.

Continuing our example, assume that the subject user responds positivelyto the question for the keyword Books, responds negatively to thequestion for the keyword Photography, and does not respond to thequestion for the keyword Fishing. After the process of FIG. 24 has beenperformed, the updated user profile of the subject user would be:

Keyword Probability Tennis 100 (fixed) Politics 100 (fixed) Books 100(fixed) Fishing 8 Sports 6 China 6 Coffee 4 Skiing 4 Europe 2 FarmAnimals 2 Photography  0 (fixed)Note that future iterations of the profile augmentation process may beperformed in order to further augment the user profile of the subjectuser.

FIG. 30 illustrates step 2604 of FIG. 28 in more detail according toanother embodiment of the present disclosure. In this embodiment, theuser profile of the subject user includes a number of keywords and aprobability assigned to each of the keywords. Initially, the userprofile of the subject user includes zero or more keywords entered bythe subject user, where each of these keywords is assigned a fixedprobability of 100%. Over time, as a number of iterations of the profileaugmentation process of FIG. 28 are performed, additional keywords areadded to the user profile of the subject user. As discussed below, theprobabilities of these additional keywords are determined based onquestions asked of the subject user and/or the number of user matchesfor the keywords in historical aggregate profiles.

More specifically, in order to augment the user profile of the subjectuser based on the historical aggregate profile of users historicallylocated at or near the current location of the subject user, the profileaugmentation function 40 first provides a preliminary question to thesubject user (step 2800). The preliminary question is preferably anopen-ended question regarding the interests of the subject user. Forexample, the preliminary question may be “What is one of your currenttopics of interest?.” The profile augmentation function 40 then receivesan answer from the subject user (step 2802). The answer from the subjectuser is referred to herein as a topic of interest. The profileaugmentation function 40 then selects a desired number of keywords fromthe historical aggregate profile that have the highest number of usermatches, do not have fixed probabilities in the user profile of thesubject user, and have the highest affinity to the topic of interestprovided by the subject user (step 2804). Affinity between the topic ofinterest and the keywords in the historical aggregate profile may bedetermined using any suitable technique for determining the affinitybetween two keywords. For example, an ontology or similar data structurethat defines relationships between words and topics may be used todetermine the degree of relationship between two keywords (e.g., degreesof separation of the two keywords in the ontology), where the degree ofrelationship is utilized as the affinity of the two keywords.

For example, assume that the user profile of the subject user is:

Keyword Probability (%) Sports 100 (fixed) Politics 100 (fixed)Also, assume that the historical aggregate profile is:

Keyword User Matches Sports 15 Books 10 Photography 7 Coffee 5 China 5Skiing 5 Europe 5 Fishing 5Further assume that the topic of interest provided by the subject useris the Winter Olympics and that the desired number of keywords to beselected is three (3). As such, the profile augmentation function 40selects Books and Photography because they have the highest number ofuser matches for keywords that do not have fixed probabilities in theuser profile of the subject user. The profile augmentation function 40then selects one more keyword from the keywords Coffee, China, Skiing,Europe, and Fishing based on the affinities of those keywords to thetopic of interest, which is the Winter Olympics. As such, in thisexample, the profile augmentation function 40 selects the keyword Skiingbecause it has a higher affinity with the topic of interest than theother keywords.

Next, the profile augmentation function 40 generates a question for eachof the selected keywords (step 2806). In general, the questions areautomatically generated in order to determine whether the subject useris interested in the identified keywords. Returning to our example, ifthe identified keywords are Books, Photography, and Skiing, the profileaugmentation function 40 may generate the following questions: “Do youhave an interest in books?,” “Do you have an interest in photography?,”and “Do you have an interest in skiing?.” Alternatively, the questionsfor the identified keywords may be a list of the identified keywordswhere the subject user will be enabled to select “Yes” or “No” for eachof the identified keywords, or the like. The profile augmentationfunction 40 then provides the questions for the identified keywords tothe subject user (step 2808), and receives answers to the questions fromthe subject user (step 2810). Note that the subject user may choose toanswer all, some, or none of the questions. Lastly, the profileaugmentation function 40 updates the user profile of the subject userbased on any answers received from the subject user and, in thisembodiment, the number of user matches for the keywords in thehistorical aggregate profile for the current location of the subjectuser (step 2812). More specifically, in one embodiment, the profileaugmentation function 40 updates the user profile of the subject userusing the process of FIG. 24 described above.

FIG. 31 illustrates the operation of the profile augmentation function40 to augment a user profile of a subject user based on a historicalaggregate profile for the embodiment of FIG. 1A wherein the profileaugmentation function 40 is implemented on the MAP server 12. First, theMAP server 12 obtains a user profile of a system user (step 2900). Thesystem user is one of the users 20-1 through 20-N. As discussed above,the MAP server 12 may obtain the user profile of the system user fromthe profile server 14, but is not limited thereto. Next, the MAP server12 obtains the current location of the system user in the mannerdescribed above (step 2902). Next, the MAP server 12 obtains ahistorical aggregate profile for the current location of the system user(step 2904). The manner in which the historical aggregate profile ispreferably obtained by the MAP server 12 is described below. In general,user profiles of users historically located at or near the currentlocation of the system user during one or more defined time windows arecombined to provide the historical aggregate profile. Again, thehistorical aggregate profile preferably includes a number of keywordsand, for each keyword, a number of user matches for that keyword in theuser profiles of the users historically located at or near the currentlocation of the system user. The profile augmentation function 40, whichfor this embodiment is implemented on the MAP server 12, then augmentsthe user profile of the system user based on the historical aggregateprofile in the manner described above (step 2906). Preferably, theprocess returns to step 2902 and is periodically or otherwise repeatedto further augment the user profile of the system user over time.

FIG. 32 illustrates the operation of the profile augmentation function40 to perform the profile augmentation process of FIG. 28 for theembodiment of FIG. 1B. In this embodiment, the profile augmentationfunction 40 is implemented on the profile server 14, one of the mobiledevices 18-1 through 18-N, the subscriber device 22, or the third-partyserver 26. First, the profile augmentation function 40 sends ahistorical aggregate profile request to the MAP server 12 that includesthe current location of the subject user (step 3000). Alternatively, ifthe subject user is a system user (i.e., one of the users 20-1 through20-N), the historical aggregate profile request may identify the subjectuser, where the MAP server 12 then obtains the current location of thesubject user. In this embodiment, the subject user may be a system useror a third-party user depending on the particular implementationdetails. In response, the MAP server 12 generates or otherwise obtains ahistorical aggregate profile for the current location of the subjectuser (step 3002). Again, the manner in which the historical aggregateprofile is preferably generated is described below. Next, the MAP serverreturns the historical aggregate profile to the profile augmentationfunction 40 (step 3004). The profile augmentation function 40 thenaugments the user profile of the subject user based on the historicalaggregate profile in the manner described above (step 3006).

FIG. 33 illustrates the operation of the MAP server 12 to generate ahistorical aggregate profile for a current location of a subject useraccording to one embodiment of the present disclosure. First, thehistory manager 58 of the MAP server 12 establishes a bounding box forthe historical aggregate profile request based on the current locationof the subject user (step 3100). Note that while a bounding box is usedin this example, other geographic shapes may be used to define abounding region for the historical request (e.g., a bounding circle). Inthis embodiment, the bounding box is a bounding box of a predefined sizecentered at the current location of the subject user. In addition toestablishing the bounding box, the history manager 58 establishes a timewindow for the historical aggregate profile request (step 3102). Thetime window is preferably identified in the historical aggregate profilerequest, but is not limited thereto. For example, if the historicalaggregate profile request is for the last week and the current date andtime are Sep. 17, 2009 at 10:00 pm, the history manager 58 may generatethe time window as Sep. 10, 2009 at 10:00 pm through Sep. 17, 2009 at10:00 pm. Note that while a single time window is used for this example,any number of one or more time windows may be defined and processedaccordingly.

Next, the history manager 58 obtains history objects relevant to thebounding box and the time window for the historical aggregate profilerequest from the datastore 66 of the MAP server 12 (step 3104). Therelevant history objects are history objects recorded for time periodswithin or intersecting the time window and for locations, or geographicareas, within or intersecting the bounding box for the historicalaggregate profile request. At this point, the history manager 58 getsthe next history object from the relevant history objects identified instep 3104 (step 3106). The history manager 58 then generates anaggregate profile for the history object (step 3108). In order togenerate the aggregate profile for the history object, the historymanager 58 compares the user profiles of the anonymous user recordsstored in the history object to one another. The resulting aggregateprofile for the history object includes a number of keywords and, foreach keyword, a number of user matches for that keyword. The historymanager 58 then determines whether there are more history objects to beprocessed (step 3110). If so, the process returns to step 3106 and isrepeated until all of the history objects that are relevant to thehistorical aggregate profile request have been processed. Once all ofthe history objects have been processed, the history manager 58 combinesthe aggregate profiles of the history objects to provide the historicalaggregate profile for the current location of the subject user (step3112). More specifically, in this embodiment, the history manager 58combines the aggregate profiles of the history objects to provide a listof keywords and, for each keyword, a number of user matches for thatkeyword over all of the history objects.

Before proceeding, it should be noted that, in the embodiments describedabove, the profile augmentation function 40 utilizes questions asked ofthe subject user. However, the profile augmentation function 40 is notlimited thereto. In another embodiment, no questions are asked of thesubject user. Rather, the profile augmentation function 40 operates toupdate the user profile of the subject user based on the aggregateprofile date (i.e., the aggregate profile of the crowd at or near thecurrent location of the subject user or the historical aggregate profilefor the current location of the subject user) according to steps 2200,2204-2214, and 2222 of FIG. 24.

It should also be noted that the profile augmentation function 40 mayutilize things in addition to the aggregate profile data when augmentinga user profile of a subject user. For example, in the embodiments ofFIGS. 25 and 30, the topic of interest provided by the subject user maybe used to identify other keywords identified as being of interest byother users that also provided the same topic of interest. The otherusers may be other users in general or other users currently orpreviously located at or near the current location of the subject user.

FIG. 34 is a block diagram of the MAP server 12 according to oneembodiment of the present disclosure. As illustrated, the MAP server 12includes a controller 170 connected to memory 172, one or more secondarystorage devices 174, and a communication interface 176 by a bus 178 orsimilar mechanism. The controller 170 is a microprocessor, digitalApplication Specific Integrated Circuit (ASIC), Field Programmable GateArray (FPGA), or the like. In this embodiment, the controller 170 is amicroprocessor, and the application layer 42, the business logic layer44, and the object mapping layer 64 (FIG. 2) are implemented in softwareand stored in the memory 172 for execution by the controller 170.Further, the datastore 66 (FIG. 2) may be implemented in the one or moresecondary storage devices 174. The secondary storage devices 174 aredigital data storage devices such as, for example, one or more hard diskdrives. The communication interface 176 is a wired or wirelesscommunication interface that communicatively couples the MAP server 12to the network 28 (FIGS. 1A and 1B). For example, the communicationinterface 176 may be an Ethernet interface, local wireless interfacesuch as a wireless interface operating according to one of the suite ofIEEE 802.11 standards, or the like.

FIG. 35 is a block diagram of the mobile device 18-1 according to oneembodiment of the present disclosure. This discussion is equallyapplicable to the other mobile devices 18-2 through 18-N. Asillustrated, the mobile device 18-1 includes a controller 180 connectedto memory 182, a communication interface 184, one or more user interfacecomponents 186, and the location function 36-1 by a bus 188 or similarmechanism. The controller 180 is a microprocessor, digital ASIC, FPGA,or the like. In this embodiment, the controller 180 is a microprocessor,and the MAP client 30-1, the MAP application 32-1, and the third-partyapplications 34-1 are implemented in software and stored in the memory182 for execution by the controller 180. In addition, if implemented onthe mobile device 18-1, the profile augmentation function 40 is alsopreferably implemented in software and stored in the memory 182 forexecution by the controller 180. In this embodiment, the locationfunction 36-1 is a hardware component such as, for example, a GPSreceiver. The communication interface 184 is a wireless communicationinterface that communicatively couples the mobile device 18-1 to thenetwork 28 (FIGS. 1A and 1B). For example, the communication interface184 may be a local wireless interface such as a wireless interfaceoperating according to one of the suite of IEEE 802.11 standards, amobile communications interface such as a cellular telecommunicationsinterface, or the like. The one or more user interface components 186include, for example, a touchscreen, a display, one or more user inputcomponents (e.g., a keypad), a speaker, or the like, or any combinationthereof.

FIG. 36 is a block diagram of the subscriber device 22 according to oneembodiment of the present disclosure. As illustrated, the subscriberdevice 22 includes a controller 190 connected to memory 192, one or moresecondary storage devices 194, a communication interface 196, and one ormore user interface components 198 by a bus 200 or similar mechanism.The controller 190 is a microprocessor, digital ASIC, FPGA, or the like.In this embodiment, the controller 190 is a microprocessor, and the webbrowser 38 (FIGS. 1A and 1B) is implemented in software and stored inthe memory 192 for execution by the controller 190. In addition, ifimplemented on the subscriber device 22, the profile augmentationfunction 40 is also preferably implemented in software and stored in thememory 192 for execution by the controller 190. The one or moresecondary storage devices 194 are digital storage devices such as, forexample, one or more hard disk drives. The communication interface 196is a wired or wireless communication interface that communicativelycouples the subscriber device 22 to the network 28 (FIGS. 1A and 1B).For example, the communication interface 196 may be an Ethernetinterface, local wireless interface such as a wireless interfaceoperating according to one of the suite of IEEE 802.11 standards, amobile communications interface such as a cellular telecommunicationsinterface, or the like. The one or more user interface components 198include, for example, a touchscreen, a display, one or more user inputcomponents (e.g., a keypad), a speaker, or the like, or any combinationthereof.

FIG. 37 is a block diagram of the third-party server 26 according to oneembodiment of the present disclosure. As illustrated, the third-partyserver 26 includes a controller 202 connected to memory 204, one or moresecondary storage devices 206, a communication interface 208, and one ormore user interface components 210 by a bus 212 or similar mechanism.The controller 202 is a microprocessor, digital ASIC, FPGA, or the like.In this embodiment, the controller 202 is a microprocessor, and one ormore services provided by the third-party server 26 are implemented insoftware and stored in the memory 204 for execution by the controller202. For instance, if implemented on the third-party server 26, theprofile augmentation function 40 is also preferably implemented insoftware and stored in the memory 204 for execution by the controller202. The one or more secondary storage devices 206 are digital storagedevices such as, for example, one or more hard disk drives. Thecommunication interface 208 is a wired or wireless communicationinterface that communicatively couples the third-party server 26 to thenetwork 28 (FIGS. 1A and 1B). For example, the communication interface208 may be an Ethernet interface, local wireless interface such as awireless interface operating according to one of the suite of IEEE802.11 standards, a mobile communications interface such as a cellulartelecommunications interface, or the like. The one or more userinterface components 210 include, for example, a touchscreen, a display,one or more user input components (e.g., a keypad), a speaker, or thelike, or any combination thereof.

FIG. 38 is a block diagram of the profile server 14 according to oneembodiment of the present disclosure. As illustrated, the profile server14 includes a controller 214 connected to memory 216, one or moresecondary storage devices 218, a communication interface 220, and one ormore user interface components 222 by a bus 224 or similar mechanism.The controller 214 is a microprocessor, digital ASIC, FPGA, or the like.In this embodiment, the controller 214 is a microprocessor, and one ormore services provided by the profile server 14 are implemented insoftware and stored in the memory 216 for execution by the controller214. For instance, if implemented on the profile server 14, the profileaugmentation function 40 is also preferably implemented in software andstored in the memory 216 for execution by the controller 214. The one ormore secondary storage devices 218 are digital storage devices such as,for example, one or more hard disk drives. The communication interface220 is a wired or wireless communication interface that communicativelycouples the profile server 14 to the network 28 (FIGS. 1A and 1B). Forexample, the communication interface 220 may be an Ethernet interface,local wireless interface such as a wireless interface operatingaccording to one of the suite of IEEE 802.11 standards, a mobilecommunications interface such as a cellular telecommunicationsinterface, or the like. The one or more user interface components 222include, for example, a touchscreen, a display, one or more user inputcomponents (e.g., a keypad), a speaker, or the like, or any combinationthereof.

Those skilled in the art will recognize improvements and modificationsto the embodiments of the present invention. All such improvements andmodifications are considered within the scope of the concepts disclosedherein and the claims that follow.

What is claimed is:
 1. A computer-implemented method comprising:obtaining aggregate profile data for a group of users relevant to acurrent location of a subject user; and augmenting a user profile of thesubject user based on the aggregate profile data for the group of usersrelevant to the current location of the subject user.
 2. The method ofclaim 1 wherein the group of users is a crowd of users that is currentlylocated at a location that is relevant to the current location of thesubject user.
 3. The method of claim 2 wherein the aggregate profiledata for the group of users is an aggregate profile of the crowd ofusers that includes a plurality of keywords from user profiles of theusers in the crowd and, for each keyword of the plurality of keywords, anumber of occurrences of the keyword in the user profiles of the usersin the crowd.
 4. The method of claim 3 wherein augmenting the userprofile of the subject user comprises augmenting the user profile of thesubject user based on the aggregate profile of the crowd of users suchthat one or more keywords from the aggregate profile of the crowd ofusers are added to the user profile of the subject user.
 5. The methodof claim 4 wherein augmenting the user profile of the subject userfurther comprises, for each of the one or more keywords from theaggregate profile added to the user profile of the subject user:computing a probability for the keyword as a function of the number ofoccurrences of the keyword in the user profiles of the users in thecrowd; and adding the probability for the keyword to the user profile ofthe subject user.
 6. The method of claim 3 wherein augmenting the userprofile of the subject user comprises: selecting one or more keywordsfrom the plurality of keywords in the aggregate profile of the crowd ofusers based on the number of occurrences of each of the plurality ofkeywords in the aggregate profile of the crowd of users; generating aquestion for each of the one or more keywords; providing the questionfor each of the one or more keywords to the subject user; receiving ananswer from the subject user for the question for at least one of theone or more keywords that is indicative of whether the subject user hasan interest in the at least one of the one or more keywords; andupdating the user profile of the subject user based on the answer fromthe subject user for the question for the at least one of the one ormore keywords.
 7. The method of claim 6 wherein updating the userprofile of the subject user comprises, for each keyword of the one ormore keywords for which questions were provided to the subject user andfor which an answer was received, updating the user profile of thesubject user such that the user profile of the subject user includes thekeyword and a fixed probability that reflects the answer from thesubject user.
 8. The method of claim 7 wherein updating the user profileof the subject user comprises, for each keyword of the plurality ofkeywords in the aggregate profile of the crowd of users for which aquestion was provided to the subject user but an answer was not receivedfrom the subject user: determining whether the keyword is alreadyincluded in the user profile of the subject user; and if the keyword isnot already included in the user profile of the subject user: computinga probability for the keyword as a function of the number of occurrencesfor the keyword from the aggregate profile of the crowd of users; andadding the keyword and the probability for the keyword to the userprofile of the subject user.
 9. The method of claim 8 wherein updatingthe user profile of the subject user further comprises, if the keywordis already included in the user profile of the subject user: computing anew probability for the keyword as a function of an old probability forthe keyword from the user profile of the subject user and the number ofoccurrences for the keyword from the aggregate profile of the crowd ofusers; and updating the user profile of the subject user to include thenew probability for the keyword.
 10. The method of claim 7 whereinupdating the user profile of the subject user comprises, for eachkeyword of the plurality of keywords in the aggregate profile of thecrowd of users for which a question was not provided to the subjectuser: determining whether the keyword is already included in the userprofile of the subject user; and if the keyword is not already includedin the user profile of the subject user: computing a probability for thekeyword as a function of the number of occurrences for the keyword fromthe aggregate profile of the crowd of users; and adding the keyword andthe probability for the keyword to the user profile of the subject user.11. The method of claim 10 wherein updating the user profile of thesubject user further comprises, if the keyword is already included inthe user profile of the subject user: computing a new probability forthe keyword as a function of an old probability for the keyword from theuser profile of the subject user and the number of occurrences for thekeyword from the aggregate profile of the crowd of users; and updatingthe user profile of the subject user to include the new probability forthe keyword.
 12. The method of claim 6 wherein augmenting the userprofile of the subject user further comprises: providing a preliminaryquestion to the subject user that asks the subject user for a topic ofinterest; and receiving an answer to the preliminary question from thesubject user that includes the topic of interest; wherein selecting theone or more keywords from the plurality of keywords in the aggregateprofile of the crowd of users comprises selecting the one or morekeywords from the plurality of keywords in the aggregate profile of thecrowd of users based on the number of occurrences of each of theplurality of keywords from the aggregate profile of the crowd of usersand the topic of interest provided by the subject user.
 13. The methodof claim 1 wherein the group of users is a plurality of usershistorically located at locations that are relevant to the currentlocation of the subject user.
 14. The method of claim 13 whereinobtaining the aggregate profile data comprises obtaining a historicalaggregate profile for the plurality of users historically located atlocations that are relevant to the current location of the subject userduring one or more previous time windows.
 15. The method of claim 13wherein the aggregate profile data for the group of users is ahistorical aggregate profile for the plurality of users historicallylocated at locations that are relevant to the current location of thesubject user, the historical aggregate profile comprising a plurality ofkeywords and, for each keyword of the plurality of keywords, a number ofoccurrences of the keyword in user profiles of the plurality of users.16. The method of claim 15 wherein augmenting the user profile of thesubject user comprises augmenting the user profile of the subject userbased on the historical aggregate profile such that one or more keywordsfrom the historical aggregate profile are added to the user profile ofthe subject user.
 17. The method of claim 16 wherein augmenting the userprofile of the subject user further comprises, for each keyword of theone or more keywords from the historical aggregate profile added to theuser profile of the subject user: computing a probability for thekeyword as a function of the number of occurrences of the keyword in theuser profiles of the plurality of users; and adding the probability forthe keyword to the user profile of the subject user.
 18. The method ofclaim 15 wherein augmenting the user profile of the subject usercomprises: selecting one or more keywords from the plurality of keywordsin the historical aggregate profile based on the number of occurrencesof each of the plurality of keywords in the historical aggregateprofile; generating a question for each of the one or more keywords;providing the question for each of the one or more keywords to thesubject user; receiving an answer from the subject user for the questionfor at least one of the one or more keywords that is indicative ofwhether the subject user has an interest in the at least one of the oneor more keywords; and updating the user profile of the subject userbased on the answer from the subject user for the question for the atleast one of the one or more keywords.
 19. The method of claim 18wherein updating the user profile of the subject user comprises, foreach keyword of the one or more keywords for which questions wereprovided to the subject user and for which an answer was received,updating the user profile of the subject user such that the user profileof the subject user includes the keyword and a fixed probability thatreflects the answer from the subject user.
 20. The method of claim 19wherein updating the user profile of the subject user comprises, foreach keyword of the plurality of keywords in the historical aggregateprofile for which a question was provided to the subject user but ananswer was not received from the subject user: determining whether thekeyword is already included in the user profile of the subject user; andif the keyword is not already included in the user profile of thesubject user: computing a probability for the keyword as a function ofthe number of occurrences for the keyword from the historical aggregateprofile; and adding the keyword and the probability for the keyword tothe user profile of the subject user.
 21. The method of claim 20 whereinupdating the user profile of the subject user further comprises, if thekeyword is already included in the user profile of the subject user:computing a new probability for the keyword as a function of an oldprobability for the keyword from the user profile of the subject userand the number of occurrences for the keyword from the historicalaggregate profile; and updating the user profile of the subject user toinclude the new probability for the keyword.
 22. The method of claim 19wherein updating the user profile of the subject user comprises, foreach keyword of the plurality of keywords in the historical aggregateprofile for which a question was provided to the subject user but ananswer was not received from the subject user: determining whether thekeyword is already included in the user profile of the subject user; andif the keyword is not already included in the user profile of thesubject user: computing a probability for the keyword as a function ofthe number of occurrences for the keyword from the historical aggregateprofile; and adding the keyword and the probability for the keyword tothe user profile of the subject user.
 23. The method of claim 22 whereinupdating the user profile of the subject user further comprises, if thekeyword is already included in the user profile of the subject user:computing a new probability for the keyword as a function of an oldprobability for the keyword from the user profile of the subject userand the number of occurrences for the keyword from the historicalaggregate profile; and updating the user profile of the subject user toinclude the new probability for the keyword.
 24. The method of claim 18wherein augmenting the user profile of the subject user furthercomprises: providing a preliminary question to the subject user thatasks the subject user for a topic of interest; and receiving an answerto the preliminary question from the subject user that includes thetopic of interest; wherein selecting the one or more keywords from theplurality of keywords in the historical aggregate profile comprisesselecting the one or more keywords from the plurality of keywords in thehistorical aggregate profile based on the number of occurrences of eachof the plurality of keywords from the historical aggregate profile andthe topic of interest provided by the subject user.
 25. The method ofclaim 1 further comprising repeating the steps of obtaining aggregateprofile data and augmenting the user profile of the subject user basedon the aggregate profile data for each of one or more subsequentlocations of the subject user.
 26. A computing device comprising: acommunication interface communicatively coupling the computing device toa network; and a controller associated with the communication interfaceand adapted to: obtain aggregate profile data for a group of usersrelevant to a current location of a subject user; and augment a userprofile of the subject user based on the aggregate profile data for thegroup of users relevant to the current location of the subject user. 27.A computer-readable medium storing software for instructing a controllerof a computing device to: obtain aggregate profile data for a group ofusers relevant to a current location of a subject user; and augment auser profile of the subject user based on the aggregate profile data forthe group of users relevant to the current location of the subject user.